[英]MYSQL: Add a column to result which contains whether this rows contain max number of a particular column or not
我正在使用 MySQL 5.7,我的表是:
cp_id | cp_name | cp_version | cp_parent_id |
---|---|---|---|
1个 | 播放列表1 | 1个 | 1个 |
2个 | 播放列表1 | 2个 | 1个 |
3个 | 播放列表1 | 3个 | 1个 |
4个 | 播放列表2 | 1个 | 4个 |
5个 | 播放列表2 | 2个 | 4个 |
6个 | 播放列表3 | 1个 | 6个 |
7 | 播放列表3 | 2个 | 6个 |
8个 | 播放列表3 | 3个 | 6个 |
9 | 播放列表4 | 1个 | 9 |
从表中可以看出:
我需要的结果是:我想在结果中添加一列,其中包含该行是否是 cp 版本行。
cp_id | cp_name | cp_version | cp_parent_id | 最大版本 |
---|---|---|---|---|
1个 | 播放列表1 | 1个 | 1个 | 0 |
2个 | 播放列表1 | 2个 | 1个 | 0 |
3个 | 播放列表1 | 3个 | 1个 | 1个 |
4个 | 播放列表2 | 1个 | 4个 | 0 |
5个 | 播放列表2 | 2个 | 4个 | 1个 |
6个 | 播放列表3 | 1个 | 6个 | 0 |
7 | 播放列表3 | 2个 | 6个 | 0 |
8个 | 播放列表3 | 3个 | 6个 | 1个 |
9 | 播放列表4 | 1个 | 9 | 1个 |
提前致谢
在 MySQL 8+ 我们可以使用MAX
作为解析 function:
SELECT *, MAX(cp_version) OVER (PARTITION BY cp_parent_id) = cp_verson AS max_version
FROM yourTable
ORDER BY cp_id;
在 MySQL 的早期版本中,我们可以使用连接方法:
SELECT t1.*, t2.cp_version_max = t1.cp_version AS max_version
FROM yourTable t1
INNER JOIN
(
SELECT cp_parent_id, MAX(cp_version) AS cp_version_max
FROM yourTable
GROUP BY cp_parent_id
) t2
ON t2.cp_parent_id = t1.cp_parent_id
ORDER BY
t1.cp_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.