MySQL - 计算 MAX 值子集的 AVG

发布于 2024-09-27 20:01:50 字数 509 浏览 1 评论 0原文

我有一个包含“日期、姓名、分数”列的表格。

我希望获得共享共同值(例如相同日期甚至名称)的行的 MAX(Score),然后对它们进行平均以给出一个数字,例如:

---- Date -----| -- 姓名 -- |分数
2010-10-10 |约翰·史密斯 | 86
2010-06-05 |泰迪·琼斯 | 71
2010-10-10 |约翰·史密斯 | 52
2010-06-05 |泰迪·琼斯 | 68
2010-08-08 |乔·布洛格斯 | 79
2010-10-10 |约翰·史密斯 | 46

因此,在上面执行 MAX(Score) 会给我 86。但是,我想要的是以下内容:

MAX(Score) 给我值 86(日期 10-10 的最大值)、79(日期 10-10 的最大值)、79(日期 10-10 的最大值)日期 08-08)和 71(日期 06-05 的最大值),然后我可以平均得到 78.67。我希望这是可能的,而不必求助于临时表?

感谢所有回复,谢谢。

I have a table with columns 'Date, Name, Score'.

I wish to get the MAX(Score) for rows which share a common value (for e.g. the same date or even name), before averaging them to give me a figure, for example:

---- Date -----| -- Name -- | Score

2010-10-10 | John Smith | 86

2010-06-05 | Tedi Jones | 71

2010-10-10 | John Smith | 52

2010-06-05 | Tedi Jones | 68

2010-08-08 | Joe Bloggs | 79

2010-10-10 | John Smith | 46

So doing a MAX(Score) on the above would give me 86. However, what I'd like is the following:

MAX(Score) to give me the values 86 (MAX for date 10-10), 79 (MAX for date 08-08) and 71 (MAX for date 06-05) which I can then average to get 78.67. I'm hoping this is possible without having to resort to temp tables?

All replies are appreciated, thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

本王不退位尔等都是臣 2024-10-04 20:01:50

每日最大值的总平均值:

SELECT AVG(dailyMax) AS avgOfDailyMax
FROM (SELECT Date, MAX(Score) AS dailyMax FROM MyTable GROUP BY Date) as DailyMaxTable 

和每日最大值:

SELECT Date, MAX(Score) AS dailyMax
FROM MyTable
GROUP BY Date

Total average of daily maximal values:

SELECT AVG(dailyMax) AS avgOfDailyMax
FROM (SELECT Date, MAX(Score) AS dailyMax FROM MyTable GROUP BY Date) as DailyMaxTable 

and daily maximal values:

SELECT Date, MAX(Score) AS dailyMax
FROM MyTable
GROUP BY Date
逐鹿 2024-10-04 20:01:50
select Date, max(Score) as MaxScore
from MyTable
group by Date

如果您还想要 Name,请执行以下操作

select m.Date, m.Name, m.Score
from (
    select Date, max(Score) as MaxScore
    from MyTable
    group by Date
) mm
inner join MyTable on mm.Date = m.Date 
    and mm.MaxScore = m.Score
select Date, max(Score) as MaxScore
from MyTable
group by Date

If you want the Name as well, do

select m.Date, m.Name, m.Score
from (
    select Date, max(Score) as MaxScore
    from MyTable
    group by Date
) mm
inner join MyTable on mm.Date = m.Date 
    and mm.MaxScore = m.Score
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文