GROUP BY 子句在 IBM dashDB 中神秘地失败

Posted

技术标签:

【中文标题】GROUP BY 子句在 IBM dashDB 中神秘地失败【英文标题】:GROUP BY clause failing mysteriously in IBM dashDB 【发布时间】:2016-07-15 01:30:55 【问题描述】:

理论上,我应该能够在 dashDB 的 SQL 语法中运行 GROUP BY 子句。这有效:

SELECT MESSAGE_BODY, MESSAGE_RETWEET_COUNT FROM COOLSCHEMA.DRIL_TWEETS 
ORDER BY MESSAGE_RETWEET_COUNT DESC
LIMIT 100;

但是,这不是:

SELECT MESSAGE_BODY, MESSAGE_RETWEET_COUNT FROM COOLSCHEMA.DRIL_TWEETS 
GROUP BY MESSAGE_BODY 
ORDER BY MESSAGE_RETWEET_COUNT DESC
LIMIT 100;

这是我从 IBM Bluemix dashDB Web 仪表板中的 Run SQL Web 控制台得到的错误。旁注,我无法复制/粘贴它,最后它被切断了,因为我既没有巨型显示器,也无法在错误消息面板中滚动。我不得不使用开发者工具复制出包含它的 div 的 innerhtml

在 SELECT 子句、HAVING 子句或 ORDER BY 子句中指定的以“MESSAGE_RETWEET_COUNT”开头的表达式未在 GROUP BY 子句中指定,或者它位于具有列函数的 SELECT 子句、HAVING 子句或 ORDER BY 子句中并且没有指定 GROUP BY 子句.. SQLCODE=-119, SQLSTATE=42803, DRIVER=3.66.46

无论如何;任何人都知道为什么我的 GROUP BY 子句不起作用?错误代码文档说我有一个 HAVING 子句 (https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/codes/src/tpc/n119.html)。我没有 HAVING 子句。

【问题讨论】:

【参考方案1】:

GROUP BY 中,所有未聚合的列都应该在GROUP BY 子句中。我推测您可能想要:

SELECT MESSAGE_BODY, SUM(MESSAGE_RETWEET_COUNT)
FROM COOLSCHEMA.DRIL_TWEETS 
GROUP BY MESSAGE_BODY 
ORDER BY SUM(MESSAGE_RETWEET_COUNT) DESC
LIMIT 100;

【讨论】:

以上是关于GROUP BY 子句在 IBM dashDB 中神秘地失败的主要内容,如果未能解决你的问题,请参考以下文章

only_full_group_by : "ORDER BY 子句不在 GROUP BY 子句中"

在连接中使用 Where 子句,以及 Group by 和 Order By

oracle中group by用法

ORDER BY 子句中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中

IBM Cloud dashDB 时区

having是否依赖于group by