作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要有关此查询的一些帮助:我想从我的表中删除以下行。该表有 4 列:UserID、UserName、Tag、Score。
对于每个标签,我只想保留得分最高的前 1000 名用户。
所以我需要按分数排序,并为每个标签保留前 1000 个用户。
谢谢
最佳答案
根据其他答案,
DELETE FROM table t1
WHERE UserID NOT IN (SELECT userID FROM table t2
WHERE t2.tag = t1.tag
ORDER BY Score DESC LIMIT 1000);
这假设 UserID
是一个唯一/主键字段。如果不是,您可以这样做:
DELETE FROM table t1
WHERE UserID||' '||Tag NOT IN (SELECT UserID||' '||Tag FROM table t2
WHERE t2.tag = t1.tag
ORDER BY Score DESC LIMIT 1000);
放入空格是因为我知道我必须在 Oracle 上做类似的事情,但不确定没有它 MySQL 会如何处理它。
关于MySQL:如何为列的每个值保留前 1000 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2804627/
我是一名优秀的程序员,十分优秀!