【问题标题】:How can you get high and low values across group using a group by in MySQL?如何在 MySQL 中使用 group by 跨组获得高值和低值?
【发布时间】:2012-03-21 17:47:27
【问题描述】:

给定下面的示例表,我如何使用纯 MySQL 检索整个组的高低范围?有可能吗?

表:

string    low    high
=====================
abc         1      10
abc        11      20
def         2       5
def         3       6

基本查询:(显然这不起作用,但会怎样?)

SELECT * from `table` GROUP BY `string`;

如果可能的话,我想通过 MySQL 到达这里:

string    low    high
=====================
abc         1      20
def         2       6

【问题讨论】:

  • 仅供参考,您的查询不起作用,因为它选择了 单个代表行minmax 列(由 MySQL 或多或少“随机”选择)。如果字段不直接属于 group by 子句,则直接在 group by 语句中选择字段会导致不可预知的结果。您应该始终使用聚合函数。在你的情况下MIN()MAX()

标签: mysql sql group-by query-optimization


【解决方案1】:

很简单:

SELECT string, MIN(low), MAX(high)
  FROM table
 GROUP BY string

【讨论】:

    【解决方案2】:

    虽然 Benoit 很接近,但从技术上讲,这是正确的答案:

    SELECT string, MIN(low) as low, MAX(high) as high
    FROM table
    GROUP BY string
    

    因为它根据问题中的要求命名列

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2012-09-16
      • 2017-09-30
      • 1970-01-01
      • 2013-05-30
      • 2023-03-07
      • 2021-02-21
      相关资源
      最近更新 更多