我想得到结果:
name monthly_count total_count
a 10 20
b 15 25
关于monthly_count:
select name, count(*) as monthly_count from table_name where updated_at = yyyymm
关于total_count:
select count(*) as total_count from table_name
我想找到一种方法通过一条SQL来实现它,但我不知道该怎么做。
最佳答案
这是一种常见的方法:
SELECT t.name
, COUNT(IF(t.updated_at = yyyymm, 1, NULL)) AS monthly_count
, COUNT(1) AS total_count
FROM table_name t
GROUP
BY t.name
获取monthly_count的技巧是使用一个表达式,当条件为真时返回非空值,当条件不为真时返回NULL。
使用 SUM 函数代替 COUNT 可以返回等效结果:
SELECT t.name
, SUM(t.updated_at = yyyymm) AS monthly_count
, SUM(1) AS total_count
FROM table_name t
GROUP
BY t.name
跟进
您可以使用任何返回 1 或 0 的表达式。要检查多个条件,您可以使用 AND
和/或 OR
运算符
例如
SELECT t.name
, SUM(t.updated_at = yyyymm AND t.flag='TRUE') AS monthly_true_count
, SUM(t.flag='TRUE') AS total_true_count
FROM table_name t
GROUP
BY t.name
这是等效的简写:
SELECT t.name
, SUM(IF( t.updated_at = yyyymm AND t.flag='TRUE', 1,0)) AS monthly_true_count
, SUM(IF(t.flag='TRUE',1,0)) AS total_true_count
FROM table_name t
GROUP
BY t.name
关于mysql - 如何通过一条SQL实现该功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872737/