【发布时间】:2015-04-14 19:21:41
【问题描述】:
我有一个庞大的产品数据库。它与另一个价格表有一对多的关系。我可以通过一次查询轻松获得特定类别的 MIN、MAX 和 AVG。
SELECT
MIN(gbp.price) AS min,
ROUND(AVG(gbp.price),2) AS ave,
MAX(gbp.price) AS max
FROM sku AS s
INNER JOIN price gbp ON gbp.sid = s.id
但是,我也希望能够获得与之相关的产品的标题 - 尽管进行了多次搜索和重写,但我无法解决这个问题。
我的数据类似于...
prod_id | title
===============
1 | prod1
2 | prod2
3 | prod3
4 | prod4
5 | prod5
6 | prod6
7 | prod7
price_id | prod_id | price | price_date
=======================================
1 | 1 | 2.99 | 2015/02/01
2 | 1 | 3.99 | 2015/02/12
3 | 2 | 12.99 | 2015/02/01
4 | 3 | 15.99 | 2015/02/01
5 | 4 | 29.99 | 2015/02/01
6 | 5 | 29.99 | 2015/02/01
7 | 5 | 24.99 | 2015/02/12
8 | 6 | 2.99 | 2015/02/01
9 | 7 | 99.99 | 2015/02/01
10 | 7 | 89.99 | 2015/02/12
我假设其他人可能想要一个类似这样的查询,所以我要问两个答案。
第一个“简单地”返回这个...
min | min_title | ave | max | max_title
============================================
2.99 | prod1 | 31.39 | 99.99 | prod7
然而,我想要的真正答案(尽管我什至无法解决上述问题)是它变得更加棘手的地方。
我想要的实际结果如下表...
min | min_title | ave | max | max_title
============================================
2.99 | prod6 | 25.85 | 89.99 | prod7
min 的2.99 是prod6,因为prod1 的2.99 价格已过期。
max 的 89.99 是 prod7,因为 99.99 的价格 prod7 已过期。
ave 是25.85,因为上面的原因,因为prod5 的价格是24.99。
我并不期待所有问题的答案,只要回答第一个问题(粗体)可能会引导我找到第二部分的答案(因为我有类似的查询可以获得最新价格等)。
【问题讨论】:
-
你打算怎么处理领带?
-
可能有多个产品与
min或max相关联 - 但是,由于这是一份概览报告,因此只需要一个名称。它只需要是我遇到问题的正确的。 -
价格日期是日期列吗?
-
现在是日期时间。因此,price_id 最大或 price_date 最高的产品应该给出最新价格。
标签: mysql inner-join min