簡體   English   中英

PHP/SQL - 如何計算每個月的星期六?

[英]PHP/SQL - How to count saturdays in each month?

我有兩個 MySQL 表,稱為“帳戶”和“事件”。

帳戶

ID 姓名
1 皮特
2 喬希
3 哈利

活動

ID 日期 帳戶ID
1 2021-10-09 1
2 2021-09-25 1
3 2021-10-23 2
4 2021-11-06 1
5 2021-10-13 1
6 2021-11-17 2
7 2021-11-06 3
8 2021-12-04 3

events 表中的 account_id 鏈接到 accounts 表中的 id。

我的問題是:對於帳戶表中的每個唯一用戶,我可以使用哪個查詢來計算每個月的星期六(日期 YYYY-mm-dd 格式)? 所以我得到了下一個結果:

姓名 九月 十月 十一月 十二月
喬希 0 1 0 0
皮特 1 1 1 0
哈利 0 0 1 1

我已經嘗試了很多查詢(即(內部)JOIN、DISTINCT 和 GROUP BY 關鍵字),但我沒有得到確切的結果。 你能幫我么?

提前謝謝了!

使用WEEKDAY判斷日期是否為星期六

返回日期的工作日索引(0 = 星期一,1 = 星期二,... 6 = 星期日)。

SELECT
 MAX(a.name) name
 , (
   SUM( CASE WHEN e.`date` between '2021-09-01' AND '2021-09-30' THEN 1 ELSE 0 END)
 ) "September"
 , (
   SUM( CASE WHEN e.`date` between '2021-10-01' AND '2021-10-31' THEN 1 ELSE 0 END)
 ) "October"
 , (
   SUM( CASE WHEN e.`date` between '2021-11-01' AND '2021-11-30' THEN 1 ELSE 0 END)
 ) "November"
 , (
   SUM( CASE WHEN e.`date` between '2021-12-01' AND '2021-12-31' THEN 1 ELSE 0 END)
 ) "December"
FROM Accounts a
LEFT JOIN Events e ON e.account_id = a.id AND WEEKDAY(e.`date`) = 5
GROUP BY a.id
;

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=2689e975b18f3a208fdda2d78b50b56c

基本上你可以使用 DAYOFWEEK 函數和 GROUP BY MONTH

SELECT 
    account_id,
    MONTH(date), 
    COUNT(*)
FROM Events 
WHERE DAYOFWEEK(date) = 7
GROUP BY account_id, MONTH(date);

SQL小提琴在這里

以及何時可以在收到的表上使用 PIVOT,例如:

WITH res AS (
  SELECT 
      account_id,
      MONTH(date) mnth, 
      COUNT(*) cnt
  FROM Events 
  WHERE DAYOFWEEK(date) = 7
  GROUP BY account_id, MONTH(date)
) SELECT 
    account_id,
    name,
    SUM(mnth=1) Januar,
    -- 
    SUM(mnth=9) September,
    SUM(mnth=10) October,
    SUM(mnth=11) November,
    SUM(mnth=12) December
FROM res
JOIN Accounts ON Accounts.id = account_id
GROUP BY account_id, name;

SQL 樞軸小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM