首页 新闻 会员 周边 捐助

Sql分组的问题,Group是如何分组的

0
悬赏园豆:5 [已解决问题] 解决于 2018-01-18 14:41

有谁帮我看看下面这个Sql语句:

复制代码
SELECT  SUM(population), 
CASE country  WHEN '中国' THEN '亚洲' 
  WHEN '印度' THEN '亚洲' 
  WHEN '日本' THEN '亚洲' 
  WHEN '美国' THEN '北美洲' 
  WHEN '加拿大'  THEN '北美洲' 
  WHEN '墨西哥'  THEN '北美洲' 
ELSE '其他' END 
FROM    Table_A 
GROUP BY
CASE country 
WHEN '中国' THEN '亚洲' 
WHEN '印度' THEN '亚洲'
 WHEN '日本' THEN '亚洲' 
WHEN '美国' THEN '北美洲' 
WHEN '加拿大'   THEN '北美洲' 
WHEN '墨西哥'   THEN '北美洲' 
ELSE '其他' END; 
复制代码

我不太明白其中的分组的过程明细。

HDWK的主页 HDWK | 初学一级 | 园豆:152
提问于:2017-12-27 18:04
< >
分享
最佳答案
0

将country字段值由国家转换为洲,然后分组

收获园豆:5
dudu | 高人七级 |园豆:30757 | 2017-12-27 18:15
SELECT  SUM(population), 
CASE country  WHEN '中国' THEN '亚洲' 
  WHEN '印度' THEN '亚洲' 
  WHEN '日本' THEN '亚洲' 
  WHEN '美国' THEN '北美洲' 
  WHEN '加拿大'  THEN '北美洲' 
  WHEN '墨西哥'  THEN '北美洲' 
ELSE '其他' END 
FROM    Table_A 

后面的那个Case我能理解,但是前面的这个case when就有点不理解了,为什么已经case when后,在select的时候,还要再case when一遍。

HDWK | 园豆:152 (初学一级) | 2017-12-27 22:05

我的意思是在group后,就已经按照州(case when)分好组了,但是为什在查询(select)的时候,又有case when了。

HDWK | 园豆:152 (初学一级) | 2017-12-27 22:20

@HDWK: GROUP BY并没有改变country字段的值,只是取出country的值计算后进行GROUP BY

dudu | 园豆:30757 (高人七级) | 2017-12-27 22:20

@HDWK: 如何真要想搞明白,需要了解一下数据库GROUP BY的原理

dudu | 园豆:30757 (高人七级) | 2017-12-27 22:22

@dudu: 我知道上面的语句把所有的数据分成了三组,分被为“亚洲、北美洲、其他”。在查询的时候,我改变了SQL语句,如下:

SELECT  SUM(population), 
CASE country  WHEN '中国' THEN '欧洲' 
  WHEN '印度' THEN '欧洲' 
  WHEN '日本' THEN '欧洲' 
  WHEN '美国' THEN '北美洲' 
  WHEN '加拿大'  THEN '北美洲' 
  WHEN '墨西哥'  THEN '北美洲' 
ELSE '其他' END 
FROM    Table_A 
GROUP BY
CASE country 
WHEN '中国' THEN '亚洲' 
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲' 
WHEN '美国' THEN '北美洲' 
WHEN '加拿大'   THEN '北美洲' 
WHEN '墨西哥'   THEN '北美洲' 
ELSE '其他' END;

我只是把查询中的亚洲改为了欧洲,但是运行的时候就报错了,这是为什么啊?

HDWK | 园豆:152 (初学一级) | 2017-12-27 22:33

@HDWK: group by 后面的字段  必须是select查询的字段;  打个比方  你select 的字段是b,  你根据a分组能不报错吗

、熙和 | 园豆:1508 (小虾三级) | 2017-12-28 18:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册