如何解决在 MySQL 的 GROUP BY 子句中从每个组中查找单行
SELECT skillset_name,level_name,level_value
FROM
(SELECT ...) q1
WHERE met=1
它返回以下内容:
+------------------+------------+-------------+
| skillset_name | level_name | level_value |
+------------------+------------+-------------+
| Python Fullstack | L1 | 1 |
| PHP Fullstack | L2 | 2 |
| Java Fullstack | L0 | 0 |
| Python Backend | L1 | 1 |
| PHP Backend | L2 | 2 |
| PHP Fullstack | L1 | 1 |
| Python Fullstack | L2 | 2 |
| PHP Backend | L1 | 1 |
| Python Backend | L2 | 2 |
+------------------+------------+-------------+
现在我需要这样过滤掉,只返回每个skillset name的最高等级,也就是我只需要这个:
+------------------+------------+-------------+
| skillset_name | level_name | level_value |
+------------------+------------+-------------+
| PHP Fullstack | L2 | 2 |
| Java Fullstack | L0 | 0 |
| PHP Backend | L2 | 2 |
| Python Fullstack | L2 | 2 |
| Python Backend | L2 | 2 |
+------------------+------------+-------------+
我怎样才能在 MysqL (5.7) 中得到它?我尝试了多种使用 GROUP BY 的方法,但似乎无法让它以正确的方式工作。
解决方法
这是一种连接方法:
SELECT t1.skillset_name,t1.level_name,t1.level_value
FROM yourTable t1
INNER JOIN
(
SELECT skillset_name,MAX(level_value) AS max_level_value
FROM yourTable
GROUP BY skillset_name
) t2
ON t2.skillset_name = t1.skillset_name AND
t2.max_level_value = t1.level_value;
,
可以通过skillset_name和level_name分组,然后选择max(level_value)应该就可以了
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。