如何获取SQL查询,以从第二个表中获取具有最小最终价格值的记录。
目录_产品表,
| sku|实体标识|
| --|--|
| ABC| 1 |
| def| 2 |
| PQR| 3 |
目录_产品_价格表,
| 价格|实体标识|代码|
| --|--|--|
| 10 | 1 |默认|
| 5 | 1 |我们|
| 17 | 1 |英国|
| 20 | 2 |默认|
| 30 | 2 |英国|
| 50 | 3 |默认|
| 50 | 3 |我们|
我想要的结果是,从第二个表中获取包含所有列的最低价格记录,
目录_产品_价格表,
| sku|实体标识|价格|代码|
| --|--|--|--|
| ABC| 1 | 5 |我们|
| def| 2 | 20 |默认|
| PQR| 3 | 50 |默认|
我试过SQL查询,
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查询中是否有错误?
2条答案
按热度按时间qcuzuvrc1#
如果您使用的是支持窗口功能的版本(
mysql 8
/mariadb 10.2或更高版本),则可以使用row_number()
按每个实体的价格对记录进行排序。如果您有领带,并且您想全部退货,您也可以使用
rank()
而不是row_number()
(两个产品具有相同的最低价格)。字符串
结果如下:
型
Demo here
kdfy810k2#
在
5.7
版本中,你需要ROW_NUMBER()
函数的功能。我们当然可以模拟ROW_NUMBER()
函数。类似于:字符串
查询结果:
型
**编辑:**上述查询适用于任何版本的MySQL。当然,如果您使用的是
MySQL version 8
,请考虑使用另一个答案中提到的ROW_NUMBER()
。