【问题标题】:MYSQL Select statment Order By with Group ByMYSQL Select 语句 Order By 和 Group By
【发布时间】:2010-05-21 18:47:11
【问题描述】:

我有以下简单的 SQL 语句

SELECT id, name, value_name, value_id
FROM table
GROUP BY id
ORDER BY value_id DESC

分组时,我想获取 value_id 最大的元组的 value_name 和 value_id。它的方式是我得到最小的价值。例如

1, name1, valuename, 3     (where i know that there is a value_id of 5)

你能帮忙吗?

【问题讨论】:

    标签: sql mysql select group-by sql-order-by


    【解决方案1】:

    在字段列表中将, value_id更改为, MAX(value_id) AS value_id...

    其实,现在我看,我想你想要的是这样的:

    SELECT a.id, a.name, MAX(b.value_id) AS value_id, (SELECT b.value_name FROM table AS b WHERE b.id = a.id AND b.value_id = MAX(a.value_id)) AS value_name
    FROM table AS a 
    GROUP BY a.id, a.name
    ORDER BY value_id DESC
    

    问题是表格没有完全规范化。因此,您有多个 id 和 name 相同的行,但每行都有一个唯一的 value_id 和 value_name。因此,获取与 value_id 关联的 value_name 的唯一方法是通过子查询(我在那里所做的)或连接......

    【讨论】:

    • 您需要按其他非聚合字段进行分组。
    • @irchmaxell 他仍然需要将 name 和 value_name 添加到他的 group by 子句中。
    • 其实,我才意识到他是在询问与 MAX(value_id) 关联的 value_name。编辑答案以对应...
    【解决方案2】:
    SELECT id, name, value_name, MAX(value_id )
    FROM table 
    GROUP BY id, name, value_name
    ORDER BY value_id DESC
    

    【讨论】:

      【解决方案3】:

      你可以通过这个语句得到最大的value_id:

      SELECT id, name, value_name, value_id
      FROM table
      GROUP BY value_id 
      HAVING max(value_id)
      

      如果您想获取其他列,您可以使用子查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        相关资源
        最近更新 更多