我想在两列中打印数据,例如: 计数类别
但是我的代码全部打印在一行中,例如: 计数类别计数类别
有什么提示吗?
Select sum(Case when population >= 1000000 and population < 5000000 then 1 else 0 end) as Count, '1 000 000 - 4 999 999' as Category,
sum(Case when population >= 500000 and population < 100000 then 1 else 1 end) as Count, '100 000 - 499 999' as Category,
sum(Case when population >= 500000 and population < 100000 then 1 else 1 end) as Count, '500 000 - 999 999' as Category,
sum(Case when population >= 500000 and population < 100000 then 1 else 1 end) as Count, 'Under 100 000' as Category,
sum(Case when population >= 500000 and population < 100000 then 1 else 1 end) as Count, 'Over 5 million' as Category
from cities
答案 0 :(得分:0)
Select sum(Case when population >= 1000000 and population < 5000000 then 1 else 0 end) as Count, '1 000 000 - 4 999 999' as Category FROM cities
UNION
SELECT sum(Case when population >= 500000 and population < 100000 then 1 else 1 end) as Count, '100 000 - 499 999' as Category FROM cities
以此类推...
使用UNION关键字在一个结果表中合并所有单个结果
如果您只想计算城市数,则您的其他情况下的部分应该处处为0而不是1 ... 无论如何,更好的解决方案是
SELECT COUNT(cities.primKey) as Count, '1 000 000 - 4 999 999' as Category FROM cities WHERE population >= 1000000 and population < 5000000
UNION
SELECT COUNT(cities.primKey) as Count, '1 000 000 - 4 999 999' as Category FROM cities WHERE population >= 500000 and population < 100000
UNION ...
答案 1 :(得分:0)
SELECT CASE WHEN Population >= 5000000
THEN 'Over 5 million'
WHEN Population >= 1000000 AND Population < 5000000
THEN '1 000 000 - 4 999 999'
WHEN Population >= 500000 AND Population < 1000000
THEN '500 000 - 999 999'
WHEN Population >= 100000 AND Population < 500000
THEN '100 000 - 499 999'
WHEN Population < 100000
THEN 'Under 100 000'
END [Category]
,COUNT(*) [Count]
FROM Cities
答案 2 :(得分:0)
如果即使没有所属城市也要获取所有类别,则可以执行以下操作:
select sum(if(ci.population is null, 0, 1)) as 'Count', cat.Category
from (
select 0 as 'low', 100000 as 'high', 'Under 100 000' as Category, 1 as 'ord'
union
select 100000, 499999, '100 000 - 499 999', 2
union
select 500000, 999999, '500 000 - 999 999', 3
union
select 1000000, 4999999, '1 000 000 - 4 999 999', 4
union
select 5000000, null, 'Over 5 million' , 5
) as cat
left join cities ci on ci.population between cat.low and ifnull(cat.high, ci.population)
group by cat.Category, cat.ord
order by cat.ord