MySQL Max()具有分组依据和多个表

时间:2019-08-26 19:31:20

标签: mysql join group-by max mysql-workbench

为了我的学习,我需要获得一个能运行的代码。我有两个表:

培训: 用户身份 日期 上邦 格威奇特 Wiederholungen

Mitglied: 用户身份 名称 姓氏

如果要用日期和名称为每个用户的“培训”表中的“ Wiederholungen”乘以“ Gewicht”,我需要显示您获得的最大功率。

我知道max()和group by存在一个“问题”。但是我对MySQL还是有点陌生​​,我只能用一个表以及每个已存在的列来查找修复程序。我必须加入两个表并创建power列。

我尝试了很多,我认为这可能是我最好的机会

select name, vorname, x.power from
(SELECT mitglied.UserID,max( Wiederholungen*Gewicht) as Power
FROM training join mitglied
where Uebung = 'Beinstrecker'
and training.UserID = mitglied.UserID
group by training.UserID) as x
inner join (training, mitglied)
on (training.UserID = mitglied.UserID)
and x.Power = Power;
'''

I get way too many results. I know the last statement is wrong (x.power = power) but i have no clue how to solve it.

1 个答案:

答案 0 :(得分:0)

这实际上是一个非常典型的问题,但是我很难找到以前的答案。

您在子查询中“开始”,找到那些最大值:

SELECT UserID, Uebung, MAX(Gewicht*Wiederholugen) AS Power
FROM training 
WHERE Uebung = 'Beinstrecker'
GROUP BY UserID, Uebung

然后,将其重新连接到它来自的表中,以找到那些最大值发生的日期:

( SELECT UserID, Uebung, MAX(Gewicht*Wiederholugen) AS Power
  FROM training 
  WHERE Uebung = 'Beinstrecker'
  GROUP BY UserID, Uebung
) AS maxes
INNER JOIN training AS t 
   ON maxes.UserID = t.UserID 
   AND maxes.Uebeng = t.Uebeng
   AND maxes.Power = (t.Gewicht*t.Wiederholugen)

最后,您加入mitglied以获得用户信息:

SELECT m.name, m.vorname, maxes.Power
FROM ( SELECT UserID, Uebung, MAX(Gewicht*Wiederholugen) AS Power
       FROM training 
       WHERE Uebung = 'Beinstrecker'
       GROUP BY UserID, Uebung
) AS maxes
INNER JOIN training AS t 
   ON maxes.UserID = t.UserID 
   AND maxes.Uebeng = t.Uebeng
   AND maxes.Power = (t.Gewicht*t.Wiederholugen)
INNER JOIN mitglied AS m ON t.UserID = m.UserID
; 

注意:t.Uebung = 'Beinstrecker'可以代替用作联接条件,并且速度可能更快;但是从风格上讲,除非有明显的性能差异,否则我会尽量避免使用此类多余的文字。