【发布时间】:2019-09-17 16:53:13
【问题描述】:
我有3张表如下:
- 产品:(product_id,product_description)
- 卖家:(seller_id,seller_name)
- 关联:(seller_id、product_id、价格)
许多卖家销售许多产品。我需要为每种产品(按递增价格排序)及其相应的供应商找到两个最便宜的价格。理想的列输出是:
product_id, product_description, seller_id, seller_name, price
p01, milk, s04, walmart, 1.50
p01, milk, s02, target, 2.25
p02, rice, s05, safeway, 1.30
p02, rice, s03, dillons, 1.75
这是我在 SQL 服务器上尝试过的;这是迈向答案的中间步骤。我触发了一个错误,但不明白为什么:
SELECT TOP 2 *
FROM
(SELECT A.seller_id, A.product_id, min(price) AS A.price
FROM Association A
GROUP BY A.seller_ID, A.product_id)
ORDER BY A.price ASC
还有错误:
Msg 102, Level 15, State 1, Line 8
Incorrect syntax near '.'.
编辑:我使用了本杰明提出的解决方案;它几乎是正确的。这是查询输出:
seller_id, product_id, price, m
1 1 7.89 1
3 1 8.00 1
6 1 8.50 1
1 2 12.05 1
6 2 12.50 1
1 3 13.67 1
6 3 15.00 1
1 4 7.66 1
3 4 7.50 1
6 4 8.24 1
值得注意的是,一些 product_id 值,例如 1 和 4,出现了 3 次,我只需要两个最低价格,而不是第三个(或更高)。所以我相信这段代码是按价格排序,但不是删除价格高于第二低的条目。
【问题讨论】:
标签: sql-server group-by sql-order-by