[英]SELECT count of multiple columns with a WHERE clause
我正在嘗試計算2個給定列的統計信息,但是我想在給定統計信息的同一個查詢中寫入多個計數。 我該怎么做?
這是我的代碼,可讓您更多地了解我要做什么
SELECT
COUNT(DISTINCT `stats`.`rank` + `stats`.`level`) as `bronze`
FROM `stats`
WHERE `stats`.`rank` = 1 AND `stats`.`level` = 30;
問題是,我想在一個語句中有多個WHERE子句,它們與給定的AS相對應。 遵循以下原則
SELECT
COUNT(DISTINCT `stats`.`rank` + `stats`.`level`) as `bronze`,
COUNT(DISTINCT `stats`.`rank` + `stats`.`level`) as `silver`
FROM `stats`
WHERE `stats`.`rank` = 1 AND `stats`.`level` = 30 ... as bronze,
`stats`.`rank` = 2 AND `stats`.`level` = 45 ... as silver ... etc
我將如何完成?
使用條件聚合和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
。
我猜你不想要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
的元組形式,這非常方便。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.