【问题标题】:How to select rows from MySQL based on max value of a one column and grouping two other columns?如何根据一列的最大值和另外两列分组从 MySQL 中选择行?
【发布时间】:2015-09-17 12:35:24
【问题描述】:

如何根据一列的最大值和另外两列分组从 MySQL 中选择行?查询需要按代码分组,按element_id分组,带where子句(element_id=1.B.1.b)和max(data_value)。

code        element_id  data_value
11-1011.00  1.B.1.a     1.33        
11-1011.00  1.B.1.b     2.00    
11-1012.00  1.B.1.a     2.67    
11-1012.00  1.B.1.b     3.67    
11-1012.00  1.B.1.C     7.00    

我试过这个:

SELECT * FROM (select
  max(`data_value`) as maxID, `code`, `element_id`
from
  table_name
GROUP BY `code`, `element_id`
ORDER BY maxID desc) abc
GROUP BY `code`

在那张表中我有很多数据。它是一个样本。

这里可以看得更清楚:

我需要结果:

11-1011.00 1.B.1.b 2.00

11-1012.00 1.B.1.c 7.00

这个结果没有 where 子句。

如果使用 where 子句,我只想要一个与我拥有的 element_id(1.B.1.b) 匹配的结果:

11-1011.00 1.B.1.b 2.00

【问题讨论】:

标签: mysql group-by subquery max grouping


【解决方案1】:

你可以通过

SELECT a.code, max( a.maxID ) , a.element_id
FROM (
    SELECT *
    FROM (
        SELECT max(data_value) AS maxID, code , element_id
        FROM table_name
        GROUP BY code , element_id
        ORDER BY maxID DESC
    ) AS abc
    GROUP BY code
) AS a
WHERE a.element_id = '1.B.1.b'
GROUP BY a.code
ORDER BY a.code

或者试试这个

SELECT a.code, a.element_id, a.data_value
FROM interests a
INNER JOIN (
    SELECT code, max( data_value ) data_value
    FROM table_name
    GROUP BY code
)b ON a.code = b.code
AND a.data_value = b.data_value
WHERE a.element_id = '1.B.1.b'
ORDER BY a.code

【讨论】:

    【解决方案2】:

    因此,您想按codeelement_id 分组,并选择最大data_value。这可以通过以下方式实现。

    SELECT
        code,
        element_id,
        max(data_value) AS data_value
    FROM table_name
    GROUP BY
        code,
        element_id
    

    现在,如果table_name 中有更多列,您需要将之前的查询设为子查询,加入到table_name,然后选择所需的列。

    SELECT table_name.*
    FROM (
        SELECT
            code,
            element_id,
            max(data_value) AS data_value
        FROM table_name
        GROUP BY
            code,
            element_id
    ) AS max_record
    INNER JOIN table_name
        ON table_name.code = max_record.code
        AND table_name.element_id = max_record.element_id
        AND table_name.data_value = max_record.data_value
    

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 2021-05-25
      • 2012-05-29
      • 2019-04-24
      • 2017-12-06
      相关资源
      最近更新 更多