使用WHERE子句SELECT多个列的计数

时间:2018-03-11 23:42:00

标签: mysql sql

我正在尝试计算2个给定列的统计信息,但我想在给定统计信息的同一查询中写入多个计数。我怎么能做到这一点?

这是我的代码,让您更多地了解我想要做的事情

try .. except

问题是,我想在一个语句中有多个WHERE子句,它们对应于给定的AS。

的内容
SELECT
  COUNT(DISTINCT `stats`.`rank` + `stats`.`level`) as `bronze`
FROM `stats`
  WHERE `stats`.`rank` = 1 AND `stats`.`level` = 30;

我将如何做到这一点?

2 个答案:

答案 0 :(得分:1)

使用带有CASE表达式的条件聚合,具体如下:

SELECT
    some_id,
    COUNT(CASE WHEN rank = 1 AND level = 30 THEN 1 END) AS bronze,
    COUNT(CASE WHEN rank = 2 AND level = 45 THEN 1 END) AS silver
FROM stats
GROUP BY some_id;

如果您真的想要对整个桌子进行统计,那么您就不需要使用GROUP BY

答案 1 :(得分:-1)

我猜你不想count(distinct)。相反,我认为你只想要count()。如果是这样,MySQL有一个方便的捷径:

SELECT SUM( s.rank = 1 AND s.level = 30) as bronze,
       SUM( s.rank = 1 AND s.level = 45) as silver,
       . . .
FROM stats s
WHERE (s.rank, s.level) IN ( (1, 30), (2, 45) );

这也使用IN的元组形式,这是一个很好的方便。