我现在正在学习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语句只能用数字表示分组,不能用列名吗?
感谢您的帮助!
最佳答案
仅对字符串和日期常量使用单引号。切勿对列别名使用单引号。你只会把自己弄糊涂。
试试这个:
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
的列。
关于mysql - SQL GROUP BY语句只能用number来分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53385542/