似乎有类似的问题,但不适合我的特定问题。我怎么能做到这一点?我已经制作了一个带有预期输出的样本表。
City | population |
Thermopolis 8
Douglas 5
Nampa 6
Eiko 4
Reno 7
Medford 3
Fresno 9
我想组建一个将Douglas,Eiko,Fresno和他们的population
专栏相结合的小组。并获得预期的输出:
Thermopolis 8
Custom_Group 18
Nampa 6
Reno 7
Medford 3
答案 0 :(得分:1)
这是一种方式(基本上你使用GROUP BY
并定义所有组):
SELECT GROUP_CONCAT(City), SUM(population)
FROM my_table
GROUP BY IF( City IN ('Douglas','Eiko','Fresno'), 1, City )
按城市分组,并将您的自定义组合并到一个城市。 GROUP_CONCAT
列出'Douglas,Eiko,Fresno'作为该组的城市(如果您想更改组名,可以执行类似的IF( City IN (..), 'Custom_Group', City )
)。
答案 1 :(得分:0)
这是一个对城市列表进行硬编码的解决方案......
SELECT
CASE WHEN City IN (
'Douglas',
'Eiko',
'Fresno'
) THEN 'Custom_Group' ELSE City END AS City,
SUM(Population) AS Population
FROM
Cities
GROUP BY
CASE WHEN City IN (
'Douglas',
'Eiko',
'Fresno'
) THEN 'Custom_Group' ELSE City END
更可持续的解决方案是创建一个控制城市分组的新表格......
SELECT
IFNULL(g.Group, c.City) AS City,
SUM(c.Population) AS Population
FROM
Cities c LEFT JOIN
City_Groups g ON g.CityID = c.ID
GROUP BY
IFNULL(g.Group, c.City)