我想得到结果:
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找到一种方法来实现它,但我不知道该怎么做。
答案 0 :(得分:0)
这是一种常见的方法:
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
运算符
e.g。
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