簡體   English   中英

MySQL總數,計數還是聯接?

[英]MySQL Sum, Count or Join?

我有以下MySQL查詢:

SELECT 
Country, City, 
COUNT(City) As Total, 
SUM(completion_status IN ('Started', 'Complete')) AS Total_Resp
FROM trespondent 
WHERE completion_status <> 'New' 
GROUP BY Country, City 
ORDER BY Counntry, City

這帶回了我的期望,這是每個城市都有計數的城市列表,完全沒有問題

Country     City     Total     Total_Resp
UK          London   150       23
UK          Leeds    150       83
France      Paris    235       99
France      Lyon     421       222

我想做的是同時也將整個國家/地區的總和帶回去,因此英國和法國的整體看起來像這樣:

Country     City     Total_Country   Total_city   Total_Resp
UK          London   300                150       23
UK          Leeds    300                150       83
France      Paris    656                235       99
France      Lyon     656                421       222

現在,我嘗試僅添加到SQL語句

COUNT(Country) As Total_Country
SUM(Country) As Total_Country

但是,兩者都帶來了與City相同的計數,我現在認為如果不使用JOIN,這是不可能的。 有人可以建議嗎?

提前致謝。

您可以為此使用相關子查詢:

SELECT t1.Country, t1.City, 
       (SELECT COUNT(t2.Country)
        FROM trespondent AS t2
        WHERE t2.Country = t1.Country) AS Total_Country,
        COUNT(t1.City) As Total_city, 
       SUM(t1.completion_status IN ('Started', 'Complete')) AS Total_Resp
FROM trespondent AS t1
WHERE t1.completion_status <> 'New' 
GROUP BY t1.Country, t1.City 
ORDER BY t1.Country, t1.City

在大多數數據庫中,您只會使用窗口函數。 在MySQL中,有幾種方法。

SELECT r.Country, r.City, rr.Total_Country, COUNT(r.City) As Total, 
       SUM(r.completion_status IN ('Started', 'Complete')) AS Total_Resp
FROM trespondent r JOIN
     (SELECT r2.Country, COUNT(*) as Total_Country
      FROM trespondent r2
      WHERE r2.completion_status <> 'New' 
      GROUP BY r2.Country
     ) rr
     ON r.Country = rr.Country
WHERE r.completion_status <> 'New' 
GROUP BY r.Country, r.City, rr.Total_Country
ORDER BY r.Country, r.City;

盡管您可以通過其他方式(例如相關子查詢)來實現此目的,但我懷疑您可能還希望在國家/地區級別匯總其他值。 這些子查詢更易於添加。 例如,您也可以輕松添加該國家/地區的響應者數量。

您可以使用CASE 例如:

SELECT COUNT(*) AS total, SUM(CASE WHEN Country = 'France' THEN 1 ELSE 0 END) AS totalFrance

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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