有谁帮我看看下面这个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;
我不太明白其中的分组的过程明细。
将country字段值由国家转换为洲,然后分组
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一遍。
我的意思是在group后,就已经按照州(case when)分好组了,但是为什在查询(select)的时候,又有case when了。
@HDWK: GROUP BY并没有改变country字段的值,只是取出country的值计算后进行GROUP BY
@HDWK: 如何真要想搞明白,需要了解一下数据库GROUP BY的原理
@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: group by 后面的字段 必须是select查询的字段; 打个比方 你select 的字段是b, 你根据a分组能不报错吗