我现在正在学习SQL,遇到这样的查询时我很困惑:
SELECT CASE
WHEN url like '%abc.com%'THEN 'abc'
When url like '%def.com%'THEN 'def'
When url like '%smiley.com%' THEN 'Smiley'
Else 'others'
End AS 'sites', count(*)
FROM websites_sources
GROUP BY 1;
上面的查询正常工作,但是仅当GROUP BY语句使用1时。如果我将Group BY写入“ sites”,则结果仅显示“ others”和所有行的总数(而不是“ others”的计数) '仅限其他网站)。
我的问题是,对于GROUP BY语句,我们只能使用数字来表示分组,而不能使用列名?
感谢您的帮助!
答案 0 :(得分:4)
仅对字符串和日期常量使用单引号。切勿对列别名使用单引号。您只会混淆自己。
尝试一下:
SELECT (CASE WHEN url like '%abc.com%' THEN 'abc'
WHEN url like '%def.com%' THEN 'def'
WHEN url like '%smiley.com%' THEN 'Smiley'
ELSE 'others'
END) AS sites,
count(*)
FROM websites_sources
GROUP BY sites;
您正在按字符串'sites'
分组,该字符串是一个常量,而不是名为sites
的列。