作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种方法来在 select 语句中为特定用户选择平均值,然后根据先前计算的平均值计算当前行中的方差。
User 和 Attmept_Number 是复合键。此外,这应该在 SELECT
或 WHERE
子句中完成。我知道使用 FROM (SELECT...)
的解决方案,但在这种情况下,我正在寻找不同的解决方案。
SELECT
User,
Attmept_Number,
(User_Score - AVG(User_Score)) As Variance
FROM Scores
通过上述语句,我得到的是列平均值,而不是用户的平均值。当我添加 GROUP BY
子句时,它会因 Composite 键而导致问题。
结果:
User Score Variance
1 5 -6
1 10 -1
1 15 4
3 14 3
目标:
User Score Variance
1 5 -5
1 10 0
1 15 5
3 14 0
最佳答案
在 MySQL 8.0 中,就像使用窗口函数 AVG(...) OVER(...)
一样简单:
SELECT
user,
score,
score - AVG(score) OVER(PARTITION BY user) AS variance
FROM scores
在早期版本中,您可以使用聚合子查询来计算每个用户的平均值,然后将其与表JOIN
:
SELECT
s.user,
s.score,
s.score - t.avg_score AS variance
FROM scores s
INNER JOIN (
SELECT user, AVG(score) avg_score FROM scores GROUP BY user
) t ON s.user = t.user
关于mysql - 如何为 SELECT 语句中的非特定键选择 GROUPED BY 平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436786/
我是一名优秀的程序员,十分优秀!