如何根据一个列的最大值并分组另外两个列从MySQL中选择行?

3

如何基于一列的最大值并分组另外两列从MySQL中选择行?查询需要通过code进行分组,通过where子句(element_id=1.B.1.b)和max(data_value)进行element_id分组。

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


1
你忘记发布问题了。那么问题是什么? - Rahul
可能是SQL选择仅具有列上最大值的行的重复问题。 - vhu
2个回答

2
您可以通过以下方式实现此目标:
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

1
所以,您想按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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接