如何通过一个SQL实现该功能?

时间:2013-11-09 05:35:40

标签: mysql sql

我想得到结果:

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找到一种方法来实现它,但我不知道该怎么做。

1 个答案:

答案 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