mysql - 在 MySQL 的 GROUP BY 子句中从每个组中查找单行
问题描述
我有一个带有子查询 q1 的查询
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 | 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;
推荐阅读
- python - PYTHON TKINTER > e = Entry() > e.bind('
', 功能) - php - Symfony 5.2:使用表单事件在动态修改表单中传递参数的问题
- rust - 'a:'a 在通用生命周期参数中的含义是什么?
- python-3.x - Seaborn 子图 x 轴未正确显示
- android - 如何获取 Android Material TextInputLayout startIcon View?
- ios - APN ssl 密钥生产与沙盒有什么区别?
- java - 如何在不破坏和重新创建片段的情况下在片段之间切换?(以类似静态的方式)
- python - TypeError:必须是实数,而不是 GK_Operators
- google-sheets - 谷歌表格和谷歌数据工作室每个日期的平均项目数
- spring - 春季批处理重启计数器