我有这个mysql查询:
SELECT round(AVG(DISTINCT points),0) as PM
FROM data
WHERE points != 0
在数据数据库中,我有几个用户属于不同的地区。每个用户可以根据需要位于任意多个区域,但是每个区域的积分都相同,因此,我们可以:
User , District , Points
1 , 1 , 20
1 , 3 , 20
1 , 21 , 20
2 , 3 , 10
2 , 7 , 10
我想提取上表的平均点数,但是无论每个用户位于多少个区中,都只计算一次。
对于我的查询,我只会得到那些分数不同的查询,但是,例如,如果我有一个拥有10点的User 3,查询将返回:15(20 + 10 = 30/2 = 15),而不是正确的值:13(20 + 10 + 10 = 40/3 = 13,3333)。
有什么帮助吗?
非常感谢!
答案 0 :(得分:0)
在查询结束时您是否尝试过GROUP BY
?
Working Online Sample Demo at SQLFiddle
构建模式...
CREATE TABLE UserPoints (
id INT(11) NOT NULL AUTO_INCREMENT,
Userid INT(11) NOT NULL DEFAULT 0,
Districtid INT(11) NOT NULL DEFAULT 0,
PointsCount INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
插入一些示例数据...
INSERT INTO UserPoints (Userid, Districtid, PointsCount) VALUES (1, 1, 10);
INSERT INTO UserPoints (Userid, Districtid, PointsCount) VALUES (1, 2, 20);
INSERT INTO UserPoints (Userid, Districtid, PointsCount) VALUES (2, 1, 12);
然后选择GROUP BY ...
SELECT Userid, AVG(PointsCount) FROM UserPoints GROUP BY Userid;
结果...
Userid AVG(PointsCount)
1 15
2 12
答案 1 :(得分:0)
group by
获取Derived table中每个用户的积分。Distinct
。尝试(假设用户由列user_id
表示-如果不同则进行更改):
SELECT ROUND(AVG(`dt`.`user_points`),0) as PM
FROM
(
SELECT `user_id`,
MAX(`points`) AS `user_points`
FROM `data`
WHERE `points` != 0
GROUP BY `user_id`
) AS `dt`