所有的项目都存储在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 |
etc....
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,但没有帮助。