gpt4 book ai didi

sql - 在sql中选择分组值

转载 作者:行者123 更新时间:2023-11-29 13:32:59 26 4
gpt4 key购买 nike

我创建了一个表

create table routes (
type character varying
, quality character varying
, route integer
, fare integer
);

insert into routes (type, quality, route, fare)
values
('X', 'GOOD', 1, 5)
,('Y', 'GOOD', 1, 7)
,('X', 'AVERAGE', 2, 10)
,('Y', 'GOOD', 2, 7)
,('X', 'BAD', 3, 8)
,('Y', 'BAD', 3, 15);

对于每个路线编号有 2 条记录,我需要根据 route,fare 为每条路线选择一行( type )和 quality .
例如,如果 type'X'quality是'GOOD''AVERAGE' , 我会选择 routefare该行并移至下一个“路线”。否则,我将从类型为“Y”的行中选择“路线”和“票价”。这意味着从上表中,我应该得到:

1,5
2,10
3,15

我想不出循环遍历每条路线的记录并从同一路线的两条记录中得出输出。

最佳答案

SELECT DISTINCT ON (route)
route, fare
FROM routes
ORDER BY route, (type = 'X' AND quality <> 'BAD') DESC, (type = 'X')

快速并生成按路线排序的结果。
假设所有列 NOT NULL

说明

您可以在 Postgres 中按 bool 表达式排序。此相关答案中的详细信息:
Time based priority in Active Record Query

我们可以只使用 type DESC 作为最后一个 ORDER BY 元素,但这将依赖于字母排序顺序,而 X Y 看起来像是其他东西的占位符。

DISTINCT ON的更多解释:
Select first row in each GROUP BY group?

->SQLfiddle demo.

关于sql - 在sql中选择分组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com