gpt4 book ai didi

mysql - 使用 Count(*) 进行 SQL 查询并选择缺少的月份

转载 作者:行者123 更新时间:2023-11-29 01:38:06 25 4
gpt4 key购买 nike

我正在使用 MySQL 数据库。

我想从表格中计算一个月内的所有行。该脚本为我生成了正确的输出:

SELECT Count(*) as size, DATE_FORMAT(mydate, "%Y-%m") as mydate
FROM Table
GROUP BY DATE_FORMAT(mydate, "%Y-%m") ASC

输出是一个带有数字和日期属性的表格。例如:

10 | 2011-01
40 | 2011-03
20 | 2011-05

我的问题是在我的数据库中没有任何行的月份不会出现在输出中。这在现在是正常的。

我想编写一个生成如下输出的 sql 查询:

10 | 2011-01
0 | 2011-02
40 | 2011-03
0 | 2011-04
20 | 2011-05

如果可能的话,我想只使用纯 SQL 语言来解决这个问题。

谁能帮我处理这个 SQL 脚本?

最佳答案

我建议创建一个永久日期表并加入其中(它非常方便),或者您可以创建一个包含日期的临时表:

CREATE TEMPORARY TABLE daterange (dte DATE); 

SET @counter := -1;
WHILE (@counter < DATEDIFF(DATE(_todate), DATE(_fromdate))) DO
INSERT daterange VALUES (DATE_ADD(_fromdate, INTERVAL @counter:=@counter + 1 DAY));
END WHILE;

然后将您的查询用作子查询,进行左连接以获取缺失的日期

SELECT ifnull(data.thecount,0) as theCount, daterange.dte FROM 
daterange LEFT JOIN
(
SELECT COUNT(*) AS theCount, DATE_FORMAT(dates.dte, "%Y-%m") as mydate
FROM table
GROUP BY DATE_FORMAT(dates.dte, "%Y-%m") ASC
) DATA
ON daterange.dte = DATA.mydate
ORDER BY daterange.dte asc

完成后删除临时表:

DROP TEMPORARY TABLE daterange

编辑:左连接非常非常错误,已在此处修复。您可能需要尝试一下格式

关于mysql - 使用 Count(*) 进行 SQL 查询并选择缺少的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34079219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com