mysql查询中的数据库distinct和avg

6qftjkof  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(284)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

两年前关门了。
改进这个问题
我有一个mysql查询:

SELECT round(AVG(DISTINCT points),0) as PM
FROM data
WHERE points != 0

在datadb中,我有几个属于不同地区的用户。每个用户可以在任意多个地区,但每个地区的积分都是相同的,因此,我们可以:

User , District , Points
   1 ,        1 ,     20 
   1 ,        3 ,     20 
   1 ,       21 ,     20 
   2 ,        3 ,     10
   2 ,        7 ,     10

我想提取上表的平均点,但只计算每个用户一次,无论他在多少地区。
在我的查询中,我只得到具有不同点的值,但是,例如,如果我有一个具有10点的用户3,查询将返回:15(20+10=30/2=15),而不是正确的值:13(20+10+10=40/3=133333)。
需要帮忙吗?
谢谢!

ikfrs5lh

ikfrs5lh1#

你试过了吗 GROUP BY 在你的询问结束时?
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);

然后用分组方式选择。。。

SELECT Userid, AVG(PointsCount) FROM UserPoints GROUP BY Userid;

结果。。。

Userid  AVG(PointsCount)
1       15
2       12
fykwrbwg

fykwrbwg2#

首先,使用 group by .
现在,使用派生表,计算平均值。你不需要使用 Distinct 现在。
try(假设用户由列表示) 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`

相关问题