[英]MYSQL Select Average for each distinct entry
我試圖通過查詢而不是在服務器端解決這個問題。
我有一張這樣的桌子:
+----+-----------+--------+--------+
| ID | RateValue | Marker | Marked |
+----+-----------+--------+--------+
| 1 | 8 | USER1 | USER2 |
| 2 | 10 | USER2 | USER1 |
| 3 | 9 | USER3 | USER1 |
| 4 | 8 | USER1 | USER3 |
| 5 | 6 | USER2 | USER3 |
| 6 | 7 | USER3 | USER2 |
+----+-----------+--------+--------+
我想要一個查詢返回每個標記用戶的平均值。
USER1 標記在第 2 行和第 3 行,總數為 9.5 (9+10/2)。
USER2 標記在第 1 行和第 6 行,總數為 7.5。
到目前為止,我只是通過將其分為兩個步驟來完成這項工作:獲取所有唯一標記的用戶:
SELECT DISTINCT Marked FROM reviews
然后獲取每個用戶的 AVG:
SELECT AVG(rateValue) FROM reviews WHERE Marked = ?
我試圖將其結合起來,但它返回了我的總平均值:
SELECT Marked,AVG(rateValue) FROM reviews WHERE Marked IN (SELECT DISTINCT Marked FROM reviews)
但它返回了我的總平均值,我希望有一個查詢返回每個不同標記用戶的平均值。
只需使用聚合:
select marked, avg(ratevalue)
from reviews
group by marked;
如果您想要平均值而不考慮列,則使用union all
來取消透視和聚合:
select user, avg(ratevalue)
from ((select marker as user, ratevalue
from reviews
) union all
(select marked as user, ratevalue
from reviews
)
) r
group by user;
這是通用的 SQL。 一些數據庫有更有效的方法來反透視兩列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.