【问题标题】:MySQL GROUP BY error in SQL ServerSQL Server 中的 MySQL GROUP BY 错误
【发布时间】:2016-08-02 14:52:09
【问题描述】:

在尝试将 MySQL 查询转换为 MsSql 查询时遇到麻烦。

错误表明:

选择列表中的“books.id”列无效,因为它不是 包含在聚合函数或 GROUP BY 子句中。

这段代码很烂。

SELECT * FROM books group by books.category_id

供参考 sqlfiddle.com/#!3/4ed19/22

提前致谢!!

【问题讨论】:

  • 一般 GROUP BY 规则说:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。”
  • MySQL 只是简单地返回一个随机行,您会注意到每个其他 DBMS 都会返回类似的错误消息。您必须决定要返回哪个行。欢迎来到真正的 SQL 的世界 :)
  • @jarlh 请将此作为参考 sqlfiddle.com/#!3/4ed19/22
  • SQLfiddle 没有回答...
  • @cerd:我喜欢 MySQL 终于切换到标准 SQL,但我敢打赌,大多数安装将切换回旧行为 不会破坏现有代码 :)

标签: mysql sql


【解决方案1】:

此 SQL 查询的投影区域需要在您用于分组依据的列之外的列上进行聚合。

select colA, MAX(colB)
from myTable
group by colA

如您所见,投影包含已完成分组的 colA。投影中使用的另一列与聚合函数一起使用。

尽量不要使用 *,因为它会要求您对除 books.category_id 之外的所有剩余列执行聚合

【讨论】:

  • 假设考虑 3 本书具有相同的 category_id 让我们说 2。你怎么看......?
  • 取决于您想要使用 groupby 实现的目标。当三本书具有相同的 category_id 时,您需要决定是要对它们的价格求和还是要显示数量,还是要显示三本书中的最高价格。如果您能在此处说明您的要求,也许我们可以提供帮助。
  • 考虑书籍表 { id name category_id} { 1 A 1} { 2 B 1} { 3 C 2} 我想通过对 category_id 进行分组来获取
  • 因为你没有聚合任何记录,只是想显示 category_id,你可以避免使用 groupBy 而是使用 DISTINCT。但是,如果您坚持使用 SELECT category_id FROM Test group by category_id 来使用组
  • 它将导致 category_id 为 1 和 2 但我希望书籍结果为基于 category_id 的 2/3 .. 如果我错了请纠正
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
相关资源
最近更新 更多