SQLite滥用聚合:SUM()

时间:2014-05-30 19:08:41

标签: sql sqlite

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

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

我有一张桌子"电子邮件"。 其中两个字段是" email_to" (包含电子邮件收件人地址字符串)和" email_box"如果电子邮件存储在" INBOX"," OUTBOX"或者" SENT"。

我现在希望得到所有" email_to",按照他们在桌子上出现的频率排序。

我不知道为什么我会得到"滥用汇总"错误。我还想问一下如何解决它。

2 个答案:

答案 0 :(得分:5)

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"来引用外观计数。

答案 1 :(得分:1)

这是您的查询:

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()

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