在这个sqlfiddle中,
CREATE TABLE t1
(
id int(11) unsigned NOT NULL,
val int(11) unsigned NOT NULL,
rank mediumint(7) unsigned,
INDEX(id),
INDEX(rank),
PRIMARY KEY(id,val)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
INSERT INTO t1 (id,val,rank) VALUES (1,2,2), (1,1,1), (1,9,1), (1,5,23),
(1,3,2), (2,2,1), (2,9,8), (2,5,0);
SELECT id,GROUP_CONCAT(CONCAT(val,'|',rank) ORDER BY rank DESC SEPARATOR ',')
FROM t1 GROUP BY id;
如何限制返回的行数GROUP_BY
?
我的问题是ORDER
withinGROUP_BY
应该与ORDER
within 相同GROUP_CONCAT
。
例如,如果使用LIMIT 3
,输出应该是
id GROUP_CONCAT(CONCAT(val,'|',rank) ORDER BY rank DESC SEPARATOR ',')
1 5|23,3|2,2|2
2 9|8,2|1,5|0
MariaDB 10.3
GROUP_CONCAT(... LIMIT )
( https://mariadb.com/kb/en/group_concat/ )OFFSET
也可以工作。MySQL 8.0 还没有
LIMIT
. 请参阅 bugs.mysql.com 中的错误 82616 (2016)、71467、62186、30098、12544 (2005)https://dbfiddle.uk/?rdbms=mariadb_10.5&fiddle=ce501d92ef88b63bca30705037d19633