0

我想得到结果:

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

关于总计数:

select count(*) as total_count from table_name

我想找到一种通过一个SQL实现它的方法,但我不知道该怎么做。

4

1 回答 1

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 的技巧是使用一个表达式,该表达式在条件为真时返回非空值,在条件不成立时返回空值。

可以使用 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
于 2013-11-09T05:42:53.990 回答