如何解决选择优先级较高的行并返回其值,按类型分组
我需要基于SELECT
并同时使用ORDER BY
的列GROUP BY
。
例如,我有以下数据:
id | type | value | priority
- A 1 100
- A 2 0
- B 3 0
- B 4 100
我需要GROUP BY type
,SELECT value
考虑ORDER BY priority DESC
。在这种情况下,输出将是:
type | value
A | 1
B | 4
当前,我可以选择MIN()
报告的MAX()
或value
值,例如:
SELECT MAX(value) ... GROUP BY type
但是它将返回错误:
type | value
A | 2
B | 4
我需要的是类似的东西
SELECT (value ORDER BY priority DESC) ... GROUP BY type
解决方法
我发现使用GROUP_CONCAT()
支持您自己的范围ORDER BY
和LIMIT
的很好的解决方案。
SELECT GROUP_CONCAT(value ORDER BY priority DESC LIMIT 1)
,
如果您的数据库版本为10.2+,请考虑使用诸如ROW_NUMBER()
之类的解析函数,其中PARTITION BY type
用于GROUP BY类型列,并从该函数中滤除等于1的返回值。 :
WITH t2 AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY type ORDER BY priority DESC) AS rn
FROM t --> your original table
)
SELECT type,value
FROM t2
WHERE rn = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。