You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取分类1、2、3的最低价格?SQL查询求助

按分类获取最低价格问题

需要获取分类1、2、3的最低价格,规则为:每条记录中若price_reduced不为0,则取该记录price与price_reduced的较小值;若price_reduced为0,则直接取price,最终按分类取所有记录的最低值。

已尝试的SQL语句

LEAST(MIN(price_reduced),MIN(price))
IFNULL(MIN(price_reduced),MIN(price)) ... WHERE price <> 0 and price_reduced <> 0 

数据库表结构及数据

idcategorypriceprice_reduced
11200100
213000
315000
42200150
521250
633000
7320090

期望输出

1 - 100
2 - 125
3 - 90

解决方案

之前的写法存在两个核心问题:

  • 过滤条件price <> 0 and price_reduced <> 0会排除price_reduced为0的记录,导致这些记录的price无法参与最低值计算
  • 直接对分类的MIN(price_reduced)和MIN(price)取最小值,逻辑错误——应该先计算单条记录的有效低价,再按分类聚合取最小值

标准格式输出SQL

SELECT 
    category,
    MIN(CASE 
        WHEN price_reduced > 0 THEN LEAST(price, price_reduced)
        ELSE price 
    END) AS lowest_price
FROM 
    your_table_name
WHERE 
    category IN (1,2,3)
GROUP BY 
    category
ORDER BY 
    category;

匹配期望格式的SQL

如果需要直接输出分类 - 价格的字符串格式,使用以下语句:

SELECT 
    CONCAT(category, ' - ', MIN(CASE 
        WHEN price_reduced > 0 THEN LEAST(price, price_reduced)
        ELSE price 
    END)) AS result
FROM 
    your_table_name
WHERE 
    category IN (1,2,3)
GROUP BY 
    category
ORDER BY 
    category;

逻辑说明

  1. 用CASE语句处理单条记录的有效价格:当price_reduced大于0时,取该记录两个价格的较小值;否则直接使用price
  2. 按category分组后,用MIN()聚合函数获取每个分类的最低有效价格
  3. 通过WHERE category IN (1,2,3)限定只查询目标分类

内容的提问来源于stack exchange,提问作者Aziz IMStorm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:00:51