如何从第二个表中获取具有最小最终价格值的记录.

Catalog_Product号桌,

sku entity_id
abc 1
def 2
pqr 3

Catalog_Product_Price号桌,

price entity_id code
10 1 default
5 1 us
17 1 uk
20 2 default
30 2 uk
50 3 default
50 3 us

我想要像从第二个表中获取所有列的最低价格记录这样的结果,

Catalog_Product_Price号桌,

sku entity_id price code
abc 1 5 us
def 2 20 default
pqr 3 50 default

我已经try 过SQL Query,

SELECT c.sku, cp.*, min(cp.final_price) FROM `Catalog_Product` as c inner join Catalog_Product_Price as cp on cp.entity_id = c.entity_id group by c.entity_id;

但它并没有像预期的那样起作用.如何使用包含最低价格列的第二个表提取记录.

这里的响应将始终是第一个匹配行,而不是最小价格值.

根据上述解决方案,在获取结果的SQL查询中是否有任何错误?

推荐答案

您需要在版本5.7中使用ROW_NUMBER()功能.我们当然可以效仿ROW_NUMBER()的功能.类似于:

SELECT cp.sku, cpp1.entity_id, cpp1.price, cpp1.code
FROM Catalog_Product cp
JOIN (
  SELECT cpp.entity_id, cpp.price, cpp.code, 
         @row_number:=CASE
            WHEN @entity_id = cpp.entity_id THEN @row_number + 1
            ELSE 1
         END AS rn,
         @entity_id:=cpp.entity_id
  FROM Catalog_Product_Price cpp,
  (SELECT @row_number:=0, @entity_id:='') vars
  ORDER BY cpp.entity_id, cpp.price
) cpp1 ON cp.entity_id = cpp1.entity_id
WHERE cpp1.rn = 1;

Query Result:

# sku      entity_id        price   code
# abc         1              5       us
# def         2              20      default
# pqr         3              50      default

EDIT:上述查询适用于任何版本的MySQL.当然,如果您使用的是MySQL version 8,请考虑使用ROW_NUMBER(),就像另一个答案中提到的那样.

一百零二

Sql相关问答推荐

GROUP BY和GROUP_CONCAT用于计算比赛排名

Access VBA SQL命令INSERT FOR MULTIME VALUE

在SQL中返回缺省值,即使查询不返回任何结果

SQL:如何在表中同时使用GROUPING和CONDITION?

从包含PostgreSQL中的JSON值的列中提取列表或目录

在MS Access Modern图表的X轴上显示时间值时遇到问题

我如何才能在付款人单列中拉出只有9个付款人单的人?

SQL仅返回第一个字母在A-Z之间的值

统计PostgreSQL中前10个最大大小表的行数

如何使子查询在UPDATE语句期间获得最新更新

使用多个WITH子查询的替代方法

配置单元查询失败:无法识别';附近的输入;LEFT'';(select子句中的';';col'

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

在Snowflake中,如何将以逗号和连字符分隔的多个混合数值拆分成数字列表

SQL 函数 DIFFERENCE 返回有趣的分数

PostgreSQL - 从同一张表中获取值

如何对 SQL 表中的连续时间戳进行分组?

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

在给定列中具有特定值的行与 SQL 中的总行数的比率

具有关联统计信息 N+1 的 Rails 6 索引资源?