作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为 source
的(简化的)表:
game_index int,
rating int,
attributes varchar(42)
现在我正在寻找一个选择命令,它可以提取每个游戏 ( rating
) 的前 3 条记录 ( game_index
)。我想将结果存储到另一个表中(称为 max
,相同的表布局)。因此可以使用多个 SQL 命令。
没有game_index
这很容易:
INSERT INTO max
SELECT * FROM source
ORDER BY rating DESC LIMIT 3
如何将其与 GROUP BY game_index
结合起来?有什么想法吗?
可以添加额外的表成员或临时表。
最佳答案
在 MySQL 8+ 中,您会这样做:
INSERT INTO max (. . . ) -- list the columns here
SELECT . . . -- list the columns here
FROM (SELECT s.*,
ROW_NUMBER() OVER (PARTITION BY game_index ORDER BY rating DESC) as seqnum
FROM source s
) s
WHERE seqnum <= 3;
这在早期版本中比较困难。如果评级
是唯一的,一种有效的方法是:
INSERT INTO max ( . . . ) -- list columns here
SELECT . . .
FROM source s
WHERE s.rating >= ANY (SELECT s2.rating
FROM source s2
WHERE s2.game_index = s.game_index
ORDER BY s2.rating DESC
LIMIT 1 OFFSET 2
);
关于mysql - 获取每个 game_index 的前 3 个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55542359/
这个问题已经有答案了: How to SELECT the newest four items per category? (8 个回答) 已关闭 4 年前。 我有一个名为 source 的(简化的)
我是一名优秀的程序员,十分优秀!