簡體   English   中英

MYSQL Select 每個不同條目的平均值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM