sql - 在多组相同ID上选择编号最小的行
问题描述
我有下表作为 sql 语句的输出
user | product | price
…
123 | 12 | 451.29
373 | 12 | 637.28
623 | 12 | 650.84
672 | 16 | 356.87
123 | 16 | 263.90
…
现在我只想获取每个 product_id 价格最低的行
SQL 相当简单
SELECT user, product, price
FROM t
WHERE product IN (
SELECT product_id
FROM p
WHERE typ LIKE 'producttyp1'
)
)
但是添加 MIN(price) 并不能像通常那样工作。我认为是因为在同一张表中有几组相同的 product_ids。是否有易于使用的解决方案,还是我必须重写整个查询?
编辑:当我从查询中删除用户时,我可以获得产品和最低价格:
12 | 451.29
16 | 263.90
但现在我必须加入用户,这是我试图避免的。
解决方案
您可以使用row_number()
:
select p.*
from (select p.*,
row_number() over (partition by product order by price asc) as seqnum
from p
) p
where seqnum = 1;
推荐阅读
- shell - 使用 echo -e 选项打印变量的值
- java - 是否有一种更简单的方法可以使用 BETWEEN 进行 JPQL 查询以在属性中包含 NULL 值
- sql - 长时间运行的 SQL 查询填满 tempdb
- java - 如何配置 Hibernate 以使用标准日志记录
- asp.net-core - 从 Cache Tag Helper 中逐出缓存
- apache-camel - 无法让骆驼故障转移连接到代理
- drupal - 如何在 Drupal 8 中为 CKEditor 字体模块添加额外的 cambria 字体
- java - 如何使用 guice 在我的控制器中注入我的服务类?
- python - 我只需要在 pyspark 数据框中附加那些具有非空值的人
- spring - 使用 oauth2-client 作为隐式授权类型时解决 [authorization_request_not_found]