我目前正在處理一個查詢,其中我拉出一個賽車手以及與該賽車手相關的三個不同的比賽時間。
select
r.id,
r.race1,
r.race2,
r.race3
from racer r
where r.race_id = 1
大約有 50 名賽車手,每個賽車手將有三個不同的比賽時間值race1,race2并且race3。我希望再添加三個布林值來指示它們是否是每場比賽中最快的時間。
select
r.id,
r.race1,
-- race1_fastest,
r.race2,
--- race2_fastest,
r.race3,
--- race3_fastest,
from racer r
where r.race_id = 1
我嘗試使用創建案例陳述句min()和使用整個其他表,with但無法使其正常作業。這里有比較所有賽車手的標準方法嗎?還是我需要創建一個單獨的查詢?
uj5u.com熱心網友回復:
找出每場比賽的最快時間,然后加入其中:
with fastest_times as (
select
race_id,
min(race1) as race1_fastest,
min(race2) as race2_fastest,
min(race3) as race3_fastest
from racer
group by race_id
)
select
r.id,
race1,
race1 = race1_fastest AS race1_fastest,
race2,
race2 = race2_fastest AS race2_fastest,
race3,
race3 = race3_fastest AS race3_fastest
from racer r
join fastest_times ft on ft.race_id = r.race_id
where r.race_id = 1
order by r.id
由于您尚未共享架構,因此不確定應該涉及哪些列。
此外,表名racer似乎命名不佳,可能應該是或類似的,并且可能具有指向andracer_times的外鍵。racerrace
uj5u.com熱心網友回復:
Postgres 提供了標量LEAST函式,我們可以在這里提供幫助:
WITH cte AS (
SELECT *, LEAST(race1, race2, race3) AS fastest
FROM racer
)
SELECT
id,
race1,
race1 = fastest AS race1_fastest,
race2,
race2 = fastest AS race2_fastest,
race3,
race3 = fastest AS race3_fastest
FROM cte
ORDER BY id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497099.html
標籤:PostgreSQL
