mysql - mysql 查询必须如何才能达到显示的结果?

标签 mysql group-by aggregate

假设,我有两个这样的表:

Table group         Table user
+----+-----------+  +----+----------+------+----------+
| id | groupname |  | id | username | rank | group_id |
+----+-----------+  +----+----------+------+----------+
|  1 | Friends   |  |  1 | Frank    |    1 |        1 |
|  2 | Family    |  |  2 | Mike     |    3 |        1 |
+----+-----------+  |  3 | Steve    |    2 |        1 |
                    |  4 | Tom      |    1 |        2 |
                    +----+----------+------+----------+

我想选择所有组并获取每个组中排名最高(最高数字)的用户。所以基本上我想得到这个结果:

+-----------------+----------+---------+---------------+    
| group.groupname | group.id | user.id | user.username |
+-----------------+----------+---------+---------------+
| Friends         |        1 |       2 |         Mike  |
| Family          |        2 |       4 |          Tom  |
+-----------------+----------+---------+---------------+    

选择怎么样? 也许很简单,但我现在还没有明白......

最佳答案

编辑2:

我之前的答案是错误的,max()调用破坏了结果。这是一个正确的解决方案:

SELECT g.groupname, g.id AS group_id, u.id AS user_id, u.username
FROM `user` u
LEFT JOIN `group` g ON (u.group_id=g.id)
WHERE u.rank=(
    SELECT MAX(rank) 
    FROM `user` u2 
    WHERE u.group_id=u2.group_id
)

WHERE 子句中的检查也应该更容易理解。

mysql> SELECT g.groupname, g.id AS group_id, u.id AS user_id, u.username
    -> FROM `user` u
    -> LEFT JOIN `group` g ON (u.group_id=g.id)
    -> WHERE u.rank=(
    ->     SELECT MAX(rank)
    ->     FROM `user` u2
    ->     WHERE u.group_id=u2.group_id
    -> );
+-----------+----------+---------+----------+
| groupname | group_id | user_id | username |
+-----------+----------+---------+----------+
| Friends   |        1 |       2 | Mike     |
| Family    |        2 |       4 | Tom      |
+-----------+----------+---------+----------+
2 rows in set (0.00 sec)

关于mysql - mysql 查询必须如何才能达到显示的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117903/

相关文章:

mysql - 需要一个 SQL 查询来查找连接两个表但比较第二个表中的多行的结果

mysql - 在 MySql 中对一周中的连续天进行分组

python - Pandas : zscore among the groups

MySQL - 从2个不同的表和组结果中选择product_id

sql-server - SQL Server : how can I get the correct DB size from sys. master_files?

r - 汇总分钟到小时的需求

wso2 ESB : Split/Gather Pattern - Single Response

mysql - 从 --all-databases 转储导入单个数据库

php - 无法使用旧的 php plain 将旧数据库数据插入新数据库

php - Laravel - 超过锁定等待超时