mysql - 选择具有最大列值的行由另一列分组而没有嵌套的 select 语句

标签 mysql sql sql-server

我知道这是 Select Rows with Maximum Column Value group by Another Column 的副本但我想选择具有最大列值的行,按另一列分组,但没有嵌套的选择语句,我知道可以这样做:

SELECT
    T.Name,
    T.Rank,
    T.ID
FROM MyTable T
WHERE T.Rank = (
    SELECT MAX( T1.Rank) FROM MyTable T1
    WHERE T1.Name= T.Name
)

其中 ID, 秩, Name 是表模式,我想先按 Name 对结果进行分组,然后从每个 Name 组中选择一行,具体取决于哪一个具有最高的 Rank。

附件是我要从中选择的表格示例 enter image description here

最佳答案

mysql> SELECT t1.nm, t1.rank,t1.id
 FROM mytable t1
 LEFT JOIN (
   SELECT nm, max(rank) as top
   FROM mytable t2
   GROUP BY nm
 ) AS t2 ON t1.nm=t2.nm AND t1.rank = t2.top
 WHERE t2.nm IS not NULL
 ORDER BY nm;

+----+------+---------+
| nm | rank | id      |
+----+------+---------+
| m  |   -1 | b7kjhsf |
| n  |   13 | d3sf    |
+----+------+---------+
2 rows in set (0.00 sec)

mysql> select * from mytable;

+----+------+----------+
| nm | rank | id       |
+----+------+----------+
| n  |   11 | asfd     |
| n  |   11 | bsf      |
| n  |   11 | zzasdfsf |
| n  |   13 | d3sf     |
| n  |   11 | effesf   |
| n  |   10 | yxxgesf  |
| n  |   11 | bkhjusf  |
| m  |   -1 | b7kjhsf  |
| m  |   -4 | cdfgabsf |
+----+------+----------+
9 rows in set (0.00 sec)

关于mysql - 选择具有最大列值的行由另一列分组而没有嵌套的 select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13491844/

相关文章:

mysql - SQL 将 "co-efficients"分配给查询条件并使用它们对结果进行排序

sql-server - 如何在存储过程中动态添加到 TSQL Where 子句

c# - 如何在 CLR Procedure 中使用 Json Parser?

php - 查找相同的表行

php - 从 cakephp 查询中获取平面数组

mysql - 按接收者姓名以外的不同用户名分组

SQL - 将来自多个表的汇总数据连接在一起

sql - 查找包含相似字符串的sql记录

SQL Server 2008 列前缀错误

mysql - 在不锁定数据库的情况下创建索引