无法解决此问题:“无法按聚合分组”
Posted
技术标签:
【中文标题】无法解决此问题:“无法按聚合分组”【英文标题】:Can't fix this: "Cannot group by an aggregate" 【发布时间】:2017-10-28 18:46:10 【问题描述】:抱歉这个愚蠢的问题。我已经阅读了很多关于同一问题的主题,但仍然无法解决这个问题......
SELECT company_name, SUM(clicks)
FROM table1
WHERE code = 'ES'
GROUP BY 1
ORDER BY clicks DESC
LIMIT 100;
这会导致:
GROUP BY 列表中不存在表达式“clicks”
如果我试试这个:
SELECT company_name, SUM(clicks)
FROM table1
WHERE code = 'ES'
GROUP BY 1,2
ORDER BY clicks DESC
LIMIT 100;
这是我得到的:
无法按聚合进行分组。
如果我尝试对“点击”不进行聚合:
SELECT company_name, clicks
FROM table1
WHERE code = 'ES'
GROUP BY 1
ORDER BY clicks DESC
LIMIT 100;
错误:GROUP BY 列表中不存在表达式“clicks”
如果将点击添加到组中:
SELECT company_name, clicks
FROM table1
WHERE code = 'ES'
GROUP BY 1,2
ORDER BY clicks DESC
LIMIT 100;
结果不是我需要的:
Company_name | clicks
-------------+--------
company1 | 250
company1 | 340
company2 | 100
company2 | 300
company2 | 344
我怎样才能得到?:
Company_name | clicks
-------------+-------
company1 | 590
company2 | 744
谢谢!
【问题讨论】:
不能按clicks
排序,不能按组排序。
请标记您的 RDBMS。
对不起@McNets,这是一家私人公司的RDBMS。说不清楚。
感谢您的格式化。下次我会坚持的!
@MarceCastro 这没有意义。如果该公司编写和使用了一些 DBMS,但其他人不知道,那么发布任何关于它的问题都是不合时宜的,因为没有人能够回答。如果某个公司使用 mysql 是机密,那么不要命名这家公司,而是命名 MySql。
【参考方案1】:
你应该这样做
SELECT company_name, SUM(clicks) as clicks
FROM table1
WHERE code = 'ES'
GROUP BY company_name
ORDER BY clicks DESC
LIMIT 100;
您的第一个查询是正确的,不知道为什么会出现错误。但是,您的第二个查询不正确,因为您无法按第二列分组,而第二列是您通过聚合得出的。
在group by
子句中使用数字,虽然看起来neater
,但实际上增加了混乱。因此尝试完全省略它们。使用正确的列别名并在group by
和order by
中使用它们以避免混淆。
【讨论】:
非常感谢!我将对其进行一些研究:-)顺便说一句,我如何选择它作为最佳答案?什么都能找到(可能是因为我的名气不大) 请阅读What should I do when someone answers my question。您必须单击答案左侧的tick
。接受答案的声望没有限制,但是要进行投票,您需要至少 10 个声望。
对不起!没注意到。感谢您的链接。
我认为这不是一个好的答案。它仅包含不使用数字别名的(主观)建议,这不是原始问题的根源(指的是来自order by
的未别名clicks
)。最多可能是good comment。
正如我在回答中提到的那样,我不确定为什么第一个错误会出现,因为查询看起来是正确的。但是我给出了第二个错误的原因以及获得他预期输出的方法。【参考方案2】:
试试这个
SELECT company_name, SUM(clicks)
FROM table1
WHERE code = 'ES'
GROUP BY company_name
ORDER BY 2 DESC;
【讨论】:
以上是关于无法解决此问题:“无法按聚合分组”的主要内容,如果未能解决你的问题,请参考以下文章
解决无法启动此程序,因为计算机中丢失MSVCP71.dll。尝试重新安装该程序以解决此问题问题
清单合并失败:属性 application@appComponentFactory 无法解决此问题