这是一种常见的方法:
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 的技巧是使用一个表达式,该表达式在条件为真时返回非空值,在条件不成立时返回空值。
可以使用 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
and/orOR
运算符
例如
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