我有一张这样的 table
ID,date,state
1,2015-04-04,1
1,2015-05-04,0
我想提出这样的请求:
SELECT
(YEAR(date)) AS year_A,
(MONTH(date)) AS month_A,
(count(*)) AS number_A,
(count(*) WHERE state = 0) AS number_B
(count(*) WHERE state = 1) AS number_C
FROM A_transaction GROUP BY year_A, month_A
得到这样的东西
year_A,month_A,number_A,number_B,number_C
2015,04,2,1,1
但这行不通。我认为问题出在 WHERE 子句上
最佳答案
您需要使用条件聚合来编写查询(即仅当条件为真时才使用 COUNT
)。这将为您提供所需的结果:
SELECT YEAR(date) AS year_A,
MONTH(date) AS month_A,
count(*) AS number_A,
count(CASE WHEN state = 0 THEN 1 END) AS number_B,
count(CASE WHEN state = 1 THEN 1 END) AS number_C
FROM A_transaction
GROUP BY year_A, month_A
请注意,您不需要将表达式括在括号中。它们只会让您的查询更难阅读。
另请注意,标准的 MySQL 日期格式是 YYYY-MM-DD
这意味着您表中的两个示例日期实际上是在不同的月份,查询的输出是
year_A month_A number_A number_B number_C
2015 4 1 0 1
2015 5 1 1 0
如果您的日期是 YYYY-DD-MM
格式,您需要使用 STR_TO_DATE
进行转换,例如
SELECT YEAR(STR_TO_DATE(date, '%Y-%d-%m')) AS year_A,
MONTH(STR_TO_DATE(date, '%Y-%d-%m')) AS month_A,
count(*) AS number_A,
count(CASE WHEN state = 0 THEN 1 END) AS number_B,
count(CASE WHEN state = 1 THEN 1 END) AS number_C
FROM A_transaction
GROUP BY year_A, month_A
关于mysql - 在具有不同 WHERE 的一列上进行多项选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991439/