如何在 MySQL 中以三个为一组显示行 [英] How to show rows in packs of three in MySQL
本文介绍了如何在 MySQL 中以三个为一组显示行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一张这样的桌子:
ID 类型时间戳1 1012 一 1023 乙 1034 乙 1045 一 1056 乙 1067 一 1078 一 1089 乙 10910 11011 乙 11112 乙 112...
我想显示按类型和时间戳排序的结果,其中类型每 3 行更改一次:
ID 类型时间戳1 1012 一 1025 一 1053 乙 1034 乙 1046 乙 1067 一 1078 一 10810 1109 乙 10911 乙 11112 乙 112...
解决方案
如果您运行的是 MySQL 8.0,请考虑:
SELECT *从 mytable订购者FLOOR((ROW_NUMBER() OVER(PARTITION BY type ORDER BY timestamp) - 1)/3),类型,时间戳
<代码>|身份证 |类型 |时间戳 ||--- |---- |--------- ||1 |一个 |101 ||2 |一个 |102 ||5 |一个 |105 ||3 |乙 |103 ||4 |乙 |104 ||6 |乙 |106 ||7 |一个 |107 ||8 |一个 |108 ||10 |一个 |110 ||9 |乙 |109 ||11 |乙 |111 ||12 |乙 |112 |
<小时>
在早期版本中,您可以使用变量来模拟ROW_NUMBER()
:
SELECT id、类型、时间戳从 (选择t.*,@rn := CASE WHEN @type = type THEN @rn + 1 ELSE 1 END rn,@type := 类型从我的表交叉连接 (SELECT @type:= NULL, @rn := 1) xORDER BY 类型,时间戳) X订购者楼层((rn - 1)/3),类型,时间戳;
I have a table like this:
ID Type Timestamp
1 A 101
2 A 102
3 B 103
4 B 104
5 A 105
6 B 106
7 A 107
8 A 108
9 B 109
10 A 110
11 B 111
12 B 112
...
I want to show a result sorted by Type and Timestamp where every 3 rows the Type changes like this:
ID Type Timestamp
1 A 101
2 A 102
5 A 105
3 B 103
4 B 104
6 B 106
7 A 107
8 A 108
10 A 110
9 B 109
11 B 111
12 B 112
...
解决方案
If you are running MySQL 8.0, consider:
SELECT *
FROM mytable
ORDER BY
FLOOR((ROW_NUMBER() OVER(PARTITION BY type ORDER BY timestamp) - 1)/3),
type,
timestamp
| id | type | timestamp |
| --- | ---- | --------- |
| 1 | A | 101 |
| 2 | A | 102 |
| 5 | A | 105 |
| 3 | B | 103 |
| 4 | B | 104 |
| 6 | B | 106 |
| 7 | A | 107 |
| 8 | A | 108 |
| 10 | A | 110 |
| 9 | B | 109 |
| 11 | B | 111 |
| 12 | B | 112 |
In earlier versions, you can use variables to emulate ROW_NUMBER()
:
SELECT id, type, timestamp
FROM (
SELECT
t.*,
@rn := CASE WHEN @type = type THEN @rn + 1 ELSE 1 END rn,
@type := type
FROM
mytable t
CROSS JOIN (SELECT @type := NULL, @rn := 1) x
ORDER BY type, timestamp
) x
ORDER BY
FLOOR((rn - 1)/3),
type,
timestamp;
这篇关于如何在 MySQL 中以三个为一组显示行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文