一尘不染

在SQL查询中如何排序LEFT JOIN的顺序?

mysql

好的,我尝试使用谷歌搜索来寻找诸如疯狂之类的答案,但是我无法解决此问题,因此我希望有人能够提供帮助。

假设我有一个用户表,非常简单的表:

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排序?


阅读 1206

收藏
2020-05-17

共1个答案

一尘不染

尝试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子句用于根据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;
2020-05-17