我正在尝试计算2个给定列的统计信息,但我想在给定统计信息的同一查询中写入多个计数。我怎么能做到这一点?
这是我的代码,让您更多地了解我想要做的事情
try .. except
问题是,我想在一个语句中有多个WHERE子句,它们对应于给定的AS。
的内容SELECT
COUNT(DISTINCT `stats`.`rank` + `stats`.`level`) as `bronze`
FROM `stats`
WHERE `stats`.`rank` = 1 AND `stats`.`level` = 30;
我将如何做到这一点?
答案 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
的元组形式,这是一个很好的方便。