我有 3 張桌子:
表:一個
id name
2 A
3 B
表:乙
id a b
3 2 Asd Ter Gsdt
4 2 Gsd Gsdt Gsda
5 2 Asd Gsd
6 3 Uty Kggs
7 3 Tyud Hffddf
表:c
id a b
6 3 d
7 3 a
8 3 g
9 3 h
10 4 j
11 5 y
12 5 s
13 6 d
14 6 h
預期輸出:
a b c d
A 2019-04-06 3 a
B 2019-04-06 6 b
我不確定如何從這個開始,如何?
uj5u.com熱心網友回復:
這個查詢可以完成這項作業,但總是存在關于速度和性能的問題。
select a.name,
(select c_date from c
join b on (c.b_id = b.id)
where b.a = a.id order by c_date desc limit 1) last_c_date,
popular.b_id,
(select photos->0 from b where id = popular.b_id) photo
from a
join (
select distinct on (a)
b.id b_id, a from b
join c on (b.id = c.b_id)
group by b.id, a
order by a, count(*) desc, b.id
) popular on (popular.a = a.id)
order by a.name
如果一個區域中有 2 個同樣受歡迎的 b 物件,則查詢會使用較小的 id。
如果它不是在 c 中包含條目的 b 物件,則 photo 的子查詢可以用 coalesce 包圍(但現在它也應該與nullvalue 一起使用)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/492775.html
標籤:sql PostgreSQL
