MYSQL:向结果添加一列,其中包含此行是否包含特定列的最大数量
MYSQL: Add a column to result which contains whether this rows contain max number of a particular column or not
我正在使用 MySQL 5.7,我的 Table 是:
cp_id
cp_name
cp_version
cp_parent_id
1
playlist1
1
1
2
playlist1
2
1
3
playlist1
3
1
4
playlist2
1
4
5
playlist2
2
4
6
playlist3
1
6
7
playlist3
2
6
8
playlist3
3
6
9
playlist4
1
9
从 table 可以看出:
- 一个播放列表可以有多个版本,但父 ID 相同。
我要求的结果是:
我想在结果中添加一列,其中包含该行是否是 cp 版本行。
cp_id
cp_name
cp_version
cp_parent_id
max_version
1
playlist1
1
1
0
2
playlist1
2
1
0
3
playlist1
3
1
1
4
playlist2
1
4
0
5
playlist2
2
4
1
6
playlist3
1
6
0
7
playlist3
2
6
0
8
playlist3
3
6
1
9
playlist4
1
9
1
提前致谢
在MySQL 8+我们可以使用MAX
作为解析函数:
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;
我正在使用 MySQL 5.7,我的 Table 是:
cp_id | cp_name | cp_version | cp_parent_id |
---|---|---|---|
1 | playlist1 | 1 | 1 |
2 | playlist1 | 2 | 1 |
3 | playlist1 | 3 | 1 |
4 | playlist2 | 1 | 4 |
5 | playlist2 | 2 | 4 |
6 | playlist3 | 1 | 6 |
7 | playlist3 | 2 | 6 |
8 | playlist3 | 3 | 6 |
9 | playlist4 | 1 | 9 |
从 table 可以看出:
- 一个播放列表可以有多个版本,但父 ID 相同。
我要求的结果是: 我想在结果中添加一列,其中包含该行是否是 cp 版本行。
cp_id | cp_name | cp_version | cp_parent_id | max_version |
---|---|---|---|---|
1 | playlist1 | 1 | 1 | 0 |
2 | playlist1 | 2 | 1 | 0 |
3 | playlist1 | 3 | 1 | 1 |
4 | playlist2 | 1 | 4 | 0 |
5 | playlist2 | 2 | 4 | 1 |
6 | playlist3 | 1 | 6 | 0 |
7 | playlist3 | 2 | 6 | 0 |
8 | playlist3 | 3 | 6 | 1 |
9 | playlist4 | 1 | 9 | 1 |
提前致谢
在MySQL 8+我们可以使用MAX
作为解析函数:
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;