我有下表,我正在尋找的是一個設備組一個以上設備組的用戶。
例如
- 對于 android user_id 1 和 3 有 >1 個不同的設備組。
- 對于 iOS,user_id 2、3 和 4 具有 >1 個不同的設備組。
- 對于 fireTV user_id 1, 2 有 >1 個不同的設備組。
桌子:
*----------------------*
|user_id | device_grp |
*----------------------*
| 1 | android |
| 1 | fireTV |
| 2 | iOS |
| 2 | fireTV |
| 3 | android |
| 3 | iOS |
| 4 | web-play |
| 4 | iOS |
| 5 | android |
*----------------------*
最后結果:
*--------------------------------------*
| device_group | users >1 device_grp |
*--------------------------------------*
| android | 2 |
| iOS | 3 |
| fireTV | 2 |
| web-play | 1 |
*--------------------------------------*
這是得到結果的小提琴,但有沒有更好的方法來實作上述結果?
uj5u.com熱心網友回復:
SELECT
device_grp as device_group,
COUNT(*) as Total
FROM table
GROUP BY device_grp
HAVING COUNT(*) > 1
但是你的例子是錯誤的,因為web-play總數不大于 1。如果你還需要web-play:
SELECT
device_grp as device_group,
COUNT(*) as Total
FROM table
GROUP BY device_grp
uj5u.com熱心網友回復:
WITH cnt AS (
SELECT *, COUNT(*) OVER (PARTITION BY user_id) as user_count
FROM users
)
SELECT device_grp, COUNT(*) AS ttl
FROM cnt
WHERE user_count > 1
GROUP BY device_grp
小提琴中查詢執行計劃的比較。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/344799.html
標籤:sql PostgreSQL
