gpt4 book ai didi

mysql - SQL:如何进行有条件的 COUNT 和 SUM

转载 作者:行者123 更新时间:2023-11-29 01:45:50 24 4
gpt4 key购买 nike

假设我有下表:

id    | letter   | date   
--------------------------------
1 | A | 2011-01-01
2 | A | 2011-04-01
3 | A | 2011-04-01
4 | B | 2011-01-01
5 | B | 2011-01-01
6 | B | 2011-01-01

我想对按字母和日期分割的行进行计数,对所有之前日期的计数求和。每个字母都应该在表格的每个日期都有一行(即字母 B 没有 2011-04-01 日期,但仍出现在结果中)

结果表看起来像这样

letter| date           | total  
--------------------------------
A | 2011-01-01 | 1
A | 2011-04-01 | 3
B | 2011-01-01 | 3
B | 2011-04-01 | 3

如何在 SQL 查询中实现这一点?感谢您的帮助!

最佳答案

注意没注意到是mysql,不支持CTE。您可以定义临时表来使用它。


这是一个有趣的问题。您有点需要将所有字母与所有日期连接起来,然后计算前面的行。如果您不关心日期计数为 0 的字母行,您可能只需要执行以下操作:

SELECT letter, date, 
(SELECT COUNT(*)
FROM tbl tbl2
WHERE tbl2.letter = tbl1.letter
AND tbl2.date <= tbl1.date) AS total
FROM tbl
ORDER BY date, letter

/删除了 CTE 解决方案/


没有 CTE 的解决方案

SELECT tblDates.[date], tblLetters.letter, 
(SELECT COUNT(*)
FROM tblData tbl2
WHERE tbl2.letter = tblLetters.letter
AND tbl2.[date] <= tblDates.[date]) AS total
FROM (SELECT DISTINCT [date] FROM tblData) tblDates
CROSS JOIN (SELECT DISTINCT letter FROM tblData) tblLetters
ORDER BY tblDates.[date], tblLetters.letter

关于mysql - SQL:如何进行有条件的 COUNT 和 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7069539/

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