[英]Removing Duplicates from complex MySQL Select Query
我的所有項目都存儲在com_projects表中。 每個項目可以有多個位置,這些位置存儲在com_location表中。 com_country表只是一個國家/地區名稱列表,com_location表用它來提取國家/地區的名稱。
在com_project表中,我有一個category_id字段,其值可以是1-4。
下面的SELECT查詢是我嘗試計算每個國家/地區分配類別的總次數。
---------------------------------------------------------------
| country | category_1 | category_2 | category_3 | category_4 |
---------------------------------------------------------------
| USA | 20 | 5 | 3 | 0 |
---------------------------------------------------------------
| UK | 1 | 12 | 0 | 0 |
等等....
SELECT b.country_id, c.name,
SUM(case when a.category_id = 1 then 1 else 0 end) as category_1,
SUM(case when a.category_id = 2 then 1 else 0 end) as category_2,
SUM(case when a.category_id = 3 then 1 else 0 end) as category_3,
SUM(case when a.category_id = 4 then 1 else 0 end) as category_4
FROM com_project a
Inner JOIN com_location b
ON a.id = b.project_id
INNER JOIN com_country c
ON c.id = b.country_id
WHERE a.state = 1
AND b.state = 1
GROUP BY b.country_id
如果項目在不同的國家/地區有一個或多個位置,我只希望增加一個類別。 我遇到的問題是,許多項目在同一個國家/地區有多個位置,並且人為地增加了結果。
如何調整我的SELECT語句以防止來自同一個國家/地區的重復?
順便說一句,我嘗試在SELECT之后立即添加DISTINCT並且它沒有幫助。
我認為where
子句可以過濾掉總是在一個國家/地區的項目:
SELECT l.country_id, c.name,
SUM(p.category_id = 1) as category_1,
SUM(p.category_id = 2) as category_2,
SUM(p.category_id = 3) as category_3,
SUM(p.category_id = 4) as category_4
FROM com_project p Inner JOIN
com_location l
ON p.id = l.project_id INNER JOIN
com_country c
ON c.id = l.country_id
WHERE p.state = 1 AND l.state = 1 AND
EXISTS (SELECT 1
FROM com_location l2
WHERE l2.project_id = l.project_id AND l2.country <> l.country
)
GROUP BY l.country_id, c.name;
這只是檢查正在聚合的每個項目是否至少有一個其他國家/地區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.