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