使用多个MySQL连接可以获得多个值

时间:2014-12-29 19:58:27

标签: mysql

我有一张桌子"率"它包含列" id"," location"," local_rate"," long_rate"。 Id是区分客户端的整数值。结果按位置分组。每个位置组都有一个来自每个客户的条目。每个客户端都有不同的local_rate和long_rate。我需要得到的是位置,最低的lo​​cal_rate和具有该速率的客户端,以及最低的lo​​ng_rate和具有该速率的客户端。表格中的每个位置都会有一行。如果某个费率有多个匹配结果,则应选择一个并返回该值,并使用该值返回客户端ID。

结果将显示为:

location1 | id(min_local_rate) | min_local_rate | id(min_long_rate) | min_long_rate
location2 | id(min_local_rate) | min_local_rate | id(min_long_rate) | min_long_rate
....

到目前为止我的查询:

SELECT local.location, local.id, local.local_rate, long.id, long.long_rate
FROM
(SELECT MIN(local_rate), location, id FROM rate GROUP BY location) local
JOIN
(SELECT MIN(long_rate), location, id FROM rate GROUP BY location) long
ON local.location = long.location
GROUP BY local.location; 

我回来的是每行中的本地客户端ID和每行中相同的长客户端ID。地点,当地费率和长费率是正确的。

1 个答案:

答案 0 :(得分:1)

首先,您可以计算一个子查询中每个位置的最小和最大本地费率。然后,您可以加入原始数据以获取客户端ID。

如果只有一个客户端具有最小值/最大值,则以下内容应该执行您想要的操作:

select l.location, l.minlr, rmin.id, l.maxlr, rmax.id
from (select location, min(local_rate) as minlr, max(local_rate) as maxlr
      from rate r
      group by location
     ) l join
     rate rmin
     on rmin.location = l.location and rmin.local_rate = l.minlr join
     rate rmax
     on rmax.location = l.location and rmax.local_rate = l.maxlr;

如果有多个匹配的行,则会为每个位置生成多行。你的问题没有说明在这种情况下要做什么。