簡體   English   中英

使用WHERE子句的SELECT多個列的計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM