好的,我尝试使用谷歌搜索来寻找诸如疯狂之类的答案,但是我无法解决此问题,因此我希望有人能够提供帮助。
假设我有一个用户表,非常简单的表:
id | userName 3 Michael 4 Mike 5 George
我还有他们的汽车和价格表。
id | belongsToUser | carPrice 1 4 5000 2 4 6000 3 4 8000
现在,我需要做的是这样的(可以随意重写):
SELECT `userName`, `carPrice` FROM `users` LEFT JOIN `cars` ON cars.belongsToUser=users.id WHERE `id`='4'
哪个返回:
Mike | 5000
但是我需要某个用户的最昂贵的汽车,而不是找到的第一个条目。
那么问题来了:如何设置LEFT JOIN表由carPrice,DESC排序?
尝试MAX搭配使用GROUP BY。
MAX
GROUP BY
SELECT u.userName, MAX(c.carPrice) FROM users u LEFT JOIN cars c ON u.id = c.belongsToUser WHERE u.id = 4; GROUP BY u.userName;
group by子句用于根据group by列的唯一组合将所选记录分为几组。然后,这使我们能够使用汇总函数(例如MAX,MIN,SUM,AVG等),这些函数将依次应用于每组记录。数据库将为每个分组返回单个结果记录。
例如,如果我们在像这样的表中有一组记录,它们代表时间和位置的温度变化:
Location Time Temperature -------- ---- ----------- London 12:00 10.0 Bristol 12:00 12.0 Glasgow 12:00 5.0 London 13:00 14.0 Bristol 13:00 13.0 Glasgow 13:00 7.0 ...
然后,如果要按位置查找最高温度,则需要将温度记录分成几组,其中特定组中的每条记录都具有相同的位置。然后,我们想找到每个组的最高温度。执行此操作的查询如下:
SELECT Location, MAX(Temperature) FROM Temperatures GROUP BY Location;