mysql - 选择除组中第一个之外的所有重复项
问题描述
我有以下查询:
SELECT id, token, cash
FROM users as tu
WHERE (SELECT COUNT(*) FROM users WHERE users.token = tu.token) > 1
ORDER BY token, cash DESC;
现在它返回所有重复的行token
,所有的行都是按值降序排列的,所以最高cash
的重复是第一个。token
cash
但我想要实现的是返回所有重复的行,除了具有最高现金的重复令牌(基本上除了一组中的第一行)。
请注意,由于 MySQL 版本,我不能使用 EXCEPT 和 OFFSET。
解决方案
您可以使用EXISTS
查询:
SELECT *
FROM users AS t
WHERE EXISTS (
SELECT 1
FROM users AS x
-- row with same token exists
-- that has higher cash value
-- or same cash value and lower id value
WHERE x.token = t.token
AND (x.cash > t.cash OR (x.cash = t.cash AND x.id < t.id))
)
推荐阅读
- java - 如果 JSON 具有无效的属性名称,RestTemplate (w/Jackson) 调用是否应该失败
- sql - 查询postgresql表的效率问题
- wijmo - 如何为wijmo中的嵌套子行添加CssClass
- python - 运行时错误 ValueError: int() 以 10 为底的无效文字:'2 3 6 6 5'
- mysql - 不小心暴露了端口?
- python - 如何解决“pip install pygame”问题?
- c++ - 将带有 DST 的时间字符串转换为 UTC 时间戳
- reactjs - onSubmit 在每次更改时触发,基本形式没有
- python - manage.py 测试:错误:参数-v/--verbosity:预期一个参数
- python - Matplotlib 动画更新 X 轴限制不起作用