【发布时间】:2016-08-29 20:48:55
【问题描述】:
我正在尝试获取每次旅行的最低价格,并知道哪些旅行详细信息对应于每次旅行的最低价格。
为此,我尝试了所有类型的子查询、连接等变体,但由于没有 1 个主键,我无法弄清楚。
我想要达到的目的是以最低的价格获得旅行,然后以最低的价格记录旅行的详细信息。
SELECT travel_id, persons, days, MIN(`price`) AS `price`
FROM travel_details
WHERE 1
GROUP BY `travel_id`
HAVING MIN(price);
我的表格列的简单版本,列是:
travel_id、persons、days、price
这些列共同构成主键。
可以为不同的人员、日期和价格预订旅行。对于travel_id、persons 和days 的相同组合,也可能存在多个价格选项。
例如,
100, 2, 4, **250**
100, 2, 4, **450**
100, 2, **5**, 450
101, 2, 4, 190
101, 2, 5, 185
成为travel_id 100 2 人 4 人。
我想要实现的是回报: 100、250,然后用正确的对应值:
100、2、4、250
101、2、5、185
现在我的结果只是混合了所有其他数据。当我将这些列包含在 group by 中时,它不仅会在 travel_id 上分组,而且还会在 persons 上分组。然后它将返回 travel_id 和 persons 的所有组合。
知道如何解决这个问题吗?
【问题讨论】:
-
在我看来,您接受了错误的答案。如果其他答案对您不起作用,则表明您的设计存在缺陷,而不是该解决方案存在缺陷。
-
可能是这样,但是如果有这样的评论,请定义设计中的缺陷是什么。具有 4 个列的普通表,所有这些列都需要唯一定义为主键列。或者一个包含 5 个列的普通表,其中 1 个 UID 列作为主键列,4 个包含值的普通列。这样一个基本的表格设置是如何设计缺陷的。问题是如何以最低的价格获得每次旅行 1 完整且正确的记录。当每次旅行有多个选项以相同 - 最低 - 价格但有例如 3 人而不是 4 人时,如何获得每次旅行的这 1 条记录。
-
对于“记录”,在您发表评论之前,我补充了Sagi的答案。有了最后一个“分组依据”,问题就解决了。所以也许你没有看到,请查看下面的答案。
-
我非常了解黑客攻击,谢谢。问题是它可能会返回不确定的结果。