簡體   English   中英

從復雜的MySQL中刪除重復項選擇查詢

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

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