我有以下查詢并在 postgress 上運行它
select
p.id as p_id,
p.name as p_name,
p.tags,
p.creator,
p.value
p.creation_date,
cp.id as c_part_id,
fr.distance
count(*) OVER() AS total_item
from t_p p
left join t_c_part cp on p.id = cp.p_id
left join t_fl fr on p.id = fr.p_id
where p.name = 'test'
ORDER BY p.id ASC, p.name ASC
OFFSET 0 FETCH NEXT 25 ROWS only
這里缺少的是我還需要得到不受“where”子句影響的 max(p.value) 和 min(p.value) - 所以從總(所有)值計算。
我夢想我可以在一個查詢中完成并減少交易數量。老實說,不確定是否可能!
我試過的是這樣的 - >
SELECT
(SELECT COUNT(*) from t_p) as count,
(SELECT json_agg(t.*) FROM (
SELECT * FROM t_p
where ***
) AS t) AS rows
但是這個看起來不太好,因為它需要在后端進行額外的 JSON 操作。
我發現我可能會嘗試使用“with”陳述句來創建一個臨時視圖,這樣 where 條件只被評估一次,但沒有成功使其作業......
uj5u.com熱心網友回復:
您可以在表單中添加額外的列作為標量子查詢(select min(value) from t_p)。它們的值與主查詢無關,因此它們應該是完全獨立的。
您的原始查詢有一些小的語法問題(缺少逗號)。我修復了這些,結果是:
select
p.id as p_id,
p.name as p_name,
p.tags,
p.creator,
p.value,
p.creation_date,
cp.p_id as c_part_id,
fr.distance,
count(*) OVER() AS total_item,
(select min(value) from t_p) as min_value,
(select max(value) from t_p) as max_value
from t_p p
left join t_c_part cp on p.id = cp.p_id
left join t_fl fr on p.id = fr.p_id
where p.name = 'test'
ORDER BY p.id ASC, p.name ASC
OFFSET 0 FETCH NEXT 25 ROWS only
請參閱DB Fiddle 上的運行查詢(沒有任何資料)。
uj5u.com熱心網友回復:
您可以加入計算 MIN 和 MAX 的子查詢。
...
from t_p p
left join t_c_part cp on p.id = cp.p_id
left join t_fl fr on p.id = fr.p_id
cross join (
select
min(value) as min_value
, max(value) as max_value
, avg(value) as avg_value
from t_p
) as v
...
然后在選擇中使用v.min_value和v.max_value。
甚至不必是 LATERAL。
uj5u.com熱心網友回復:
您可以像這樣“側面”獲得最小值和最大值:
select
p.id as p_id,
p.name as p_name,
p.tags,
p.creator,
p.value
p.creation_date,
cp.id as c_part_id,
fr.distance,
count(*) OVER() AS total_item,
p.min_value,
p.max_value
from (SELECT id,
name,
tags,
creator,
value,
creation_date,
min(value) OVER () AS min_value,
max(value) OVER () AS max_value,
FROM t_p) AS p
left join t_c_part cp on p.id = cp.p_id
left join t_fl fr on p.id = fr.p_id
where p.name = 'test'
ORDER BY p.id ASC, p.name ASC
OFFSET 0 FETCH NEXT 25 ROWS only;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/361557.html
標籤:sql PostgreSQL的
下一篇:尋找“總和并結合”json列
