【问题标题】:SQLite Misuse of aggregate: SUM()SQLite 滥用聚合:SUM()
【发布时间】:2014-05-30 19:08:41
【问题描述】:

请问这个 SQL 命令有什么问题?

SELECT DISTINCT email_to FROM emails WHERE email_box='SENT' ORDER BY SUM(email_to)

我有一张桌子emails。 其中两个字段是email_to(包含电子邮件收件人地址字符串)email_box,它指示email 是否存储在INBOXOUTBOXSENT 中。

我现在想获取所有email_to's,按它们在表中出现的频率排序。

我不知道为什么会收到 misuse of aggregate 错误。我也想问一下怎么解决。

【问题讨论】:

标签: sql sqlite


【解决方案1】:

order by 语句中的字段在 select 语句之后计算。这意味着它只能引用已经在 select 语句中的字段。试试:

SELECT email_to, count(*) as total_emails FROM emails WHERE email_box='SENT' group by email_to ORDER BY total_emails

在上面的查询中,order by 语句可以使用“total_emails”字段引用出现次数。

【讨论】:

  • 关于“DISTINCT”?
  • Group By 只返回一个。 Distinct 是多余的。
【解决方案2】:

这是您的查询:

SELECT DISTINCT email_to
FROM emails
WHERE email_box = 'SENT'
ORDER BY SUM(email_to);

SUM() 建议聚合查询,但这不是聚合。您可以改用group by 来解决此问题:

SELECT email_to
FROM emails
WHERE email_box = 'SENT'
GROUP BY email_to
ORDER BY SUM(email_to);

但是,我怀疑email_to 实际上是一个数字。如果您想按 count 排序,请使用 count():

SELECT email_to
FROM emails
WHERE email_box = 'SENT'
GROUP BY email_to
ORDER BY COUNT(*);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-16
    • 2018-10-10
    • 1970-01-01
    • 2010-10-13
    • 2015-05-19
    • 1970-01-01
    • 2017-12-22
    • 2016-11-08
    相关资源
    最近更新 更多