为了我的学习,我需要获得一个能运行的代码。我有两个表:
培训: 用户身份 日期 上邦 格威奇特 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.
答案 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'
可以代替用作联接条件,并且速度可能更快;但是从风格上讲,除非有明显的性能差异,否则我会尽量避免使用此类多余的文字。