问题概述
我们有一个网站,可以比较同一车型的多种不同价格,我们希望以最便宜的价格按升序显示模型。
模式的
问题涉及三个表格(为便于理解而简化)
模型
以最便宜的价格订购模型
模型将有许多衍生品,每种衍生品都有很多价格。我们希望以任何衍生品的最低价格订购模型。
此查询
select `models`.name, `prices`.`rental` from `models` inner join
`derivatives` on `derivatives`.`model_code` = `models`.`code` inner
join `prices` on `prices`.`cap_id` = `derivatives`.`cap_id` order by
`rental` asc limit 15 offset 0;
将导致以下(几乎正确)
但显然我们只希望每个模型显示一个结果。如果我们尝试添加group by子句,则由于MySQL随机选择一个条目,因此最低价格会丢失。他们的文件解释说:
“但是,当GROUP BY中未命名的每个非聚合列中的所有值对于每个组都相同时,这非常有用。服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的。 “
https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html
所以这个查询
select `models`.name, `prices`.`rental` from `models` inner join
`derivatives` on `derivatives`.`model_code` = `models`.`code` inner
join `prices` on `prices`.`cap_id` = `derivatives`.`cap_id` group by
`models`.`code` order by `rental` asc limit 15 offset 0;
结果如下所示,您可以看到SANDERO HATCHBACK显示的租金不是之前找到的最低租金
答案 0 :(得分:0)
select `models`.name, min(`prices`.`rental`) from `models` inner join
`derivatives` on `derivatives`.`model_code` = `models`.`code` inner
join `prices` on `prices`.`cap_id` = `derivatives`.`cap_id` group by
`models`.`code` order by min(`rental`) asc limit 15 offset 0;
选择租借的最小值 - 这将显示结果中的最小值 按租赁的最低价值排序 - 这将把它放在结果中的正确位置。