我有以下表格:
+--------+-------+
|Username|Points |
+--------+-------+
|User1 | 75.00 |
|User1 | 87.50 |
|User1 |100.00 |
|User1 | 40.00 |
|User1 | 50.00 |
|User2 |100.00 |
|User3 | 37.50 |
|User3 | 12.50 |
+--------+-------+
我希望查询只显示带有User1的1个字段,其中5个字段的平均值为username = User1,而User3则相同。然后获得所有用户的平均值。
所以它会是:
AVG (avg user1 + avg user2 + avg user3)
任何想法如何实现?
我尝试了以下但是给了我错误的平均值:
SELECT ROUND(AVG(finalgrade),2) AS grade FROM
(
SELECT DISTINCT(u.username), gg.finalgrade AS finalgrade FROM ...
很多JOIN和WHERE
)
AS average
答案 0 :(得分:0)
您需要使用子查询。首先根据用户获得平均值,然后对其进行平均,就像你说的那样:
SELECT AVG(points) from (
SELECT AVG(points) AS points FROM ... GROUP BY username) a;
不需要DISTINCT。
答案 1 :(得分:0)
尝试使用以下查询。
SELECT Username, ROUND(AVG(Points),2) AS Points
FROM YourTable
JOIN...
GROUP BY username
答案 2 :(得分:0)
你需要这个:
SELECT
*
FROM
(
(
SELECT
UserName
,AVG(Points) AS AvgUserPoints
FROM <table>
GROUP BY UserName
) AS T1
INNER JOIN
(
SELECT
AVG(Points) AvgPoints
FROM <table>
) AS T2 ON 1=1
)
答案 3 :(得分:0)
我们说这个表是: 创建表user_points (username varchar(10),points number(5,2));
以下查询以行显示结果:
select username, avg(points) from user_points where username in ('User1','User3') group by username
union all
select 'All', avg(points) from user_points;
要在列中获得相同的结果,您需要一个包含单个行和列的表,并在3个单独的子查询中实现AVG。
答案 4 :(得分:0)
select username,avg(points) averg,count(*) obs
from t
group by username with rollup
结果
+----------+------------+-----+
| username | averg | obs |
+----------+------------+-----+
| User1 | 70.500000 | 5 |
| User2 | 100.000000 | 1 |
| User3 | 25.000000 | 2 |
| NULL | 62.812500 | 8 |
+----------+------------+-----+