【问题标题】:valid or invalid GROUP BY query有效或无效的 GROUP BY 查询
【发布时间】:2013-10-24 14:19:38
【问题描述】:
 SELECT S2.A
 FROM S1, S2
 WHERE S1.A = S2.A
 GROUP BY S1.A
 HAVING COUNT(*) > 1;

这是一个有效的查询吗?

因为据我了解,您的 select 子句中的任何内容都必须在您的 group by 子句中,但此查询不遵循它。

但是,通过查看此查询,这对我来说确实有意义,因为您正在从 S2 中选择 A 属性值,使得 S1.A = S2.A 从而 S1 的特定 A 值的数量超过 1记录。

【问题讨论】:

  • 你需要根据你选择的分组,所以如果你选择了S2.A你就不能按S1.A分组...
  • @alfasin “坏事”,但在 mysql 中并非如此......
  • @RaphaëlAlthaus 我的错 - 我没有注意到 mysql 标签。顺便说一句,它对于 PLSQL

标签: mysql sql group-by


【解决方案1】:

好吧,当您在 MYSQL 中使用聚合时,您不需要在 group by 的 select 子句中包含未聚合的任何内容(因此您的假设在 ANSI 上是正确的,但对于 mysql 而言并非真正正确)。

但是作为S1.A = S2.A,你为什么不选择S1.A

顺便说一句,你应该使用JOIN,我会这样写查询:

SELECT S1.A
FROM S1
INNER JOIN S2 on S1.A = S2.A
GROUP BY S1.A
HAVING COUNT(*) > 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 2014-02-20
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2012-07-07
    相关资源
    最近更新 更多