SQL打印成一行

时间:2019-02-07 14:46:03

标签: mysql

我想在两列中打印数据,例如: 计数类别

但是我的代码全部打印在一行中,例如: 计数类别计数类别

有什么提示吗?

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

3 个答案:

答案 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