【问题标题】: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。

标签: sql group-by


【解决方案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 byorder 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2010-12-25
    • 2018-05-24
    • 1970-01-01
    • 2021-09-03
    • 2021-08-02
    相关资源
    最近更新 更多