我有下表members
:
album_id | user_id
-------------------
1 1
1 2
1 4
2 1
2 4
4 1
5 3
具有唯一約束(album_id, user_id)
。
我想知道每個畫廊有多少用戶,但前提是畫廊包含給定的用戶。
因此,例如,如果我得到所有行user_id = 4
,我想得到類似的結果
album_id | count(user_id)
-------------------------
1 3
2 2
uj5u.com熱心網友回復:
SELECT album_id, count(*) AS ct
FROM tbl t
JOIN tbl t1 USING (album_id)
WHERE t.user_id = 4
GROUP BY 1
ORDER BY 1; -- optional
我從許多可能的解決方案中選擇了這種形式,因為它可以在(user_id)
.
為獲得最佳性能,您有兩個索引:一個 on (user_id, album_id)
,另一個 on (album_id)
(或album
作為前導列的多列索引)。看:
- 復合索引是否也適用于第一個欄位的查詢?
假設user_id
是NOT NULL
,所以count(*)
是等價的,但速度更快。看:
- Postgres:計數(*)與計數(id)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/476777.html
標籤:sql PostgreSQL 加入 总计的