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

如何在双货币场景下查询最低价格对应的产品型号与厂商?

解决统一货币后查询最低价格对应信息的问题

表结构

CREATE TABLE Produs
(
    model NUMBER NOT NULL,
    fabricant VARCHAR2(30) NOT NULL,
    categorie VARCHAR2(30) NOT NULL,
    pret NUMBER NOT NULL,
    moneda VARCHAR2(3) NOT NULL -- 补充你提到的货币字段,原建表语句未包含
);

需求说明

将所有产品价格统一转换为RON(EUR按汇率5换算),查询转换后价格最低的产品对应的model(型号)和fabricant(厂商)信息。

原SQL的问题

你写的SQL逻辑存在明显错误:
子查询中的WHERE pret=(CASE ...)条件完全不符合需求,只会筛选出价格等于自身(RON)或价格恰好等于原价格5倍(几乎不存在的情况)的数据,导致MIN(pret)取值异常,外层WHERE pret < ...自然会返回大量无关数据。

正确的SQL写法

方法1:使用窗口函数(推荐,Oracle 12c及以上版本支持)

SELECT model, fabricant
FROM (
    SELECT 
        model, 
        fabricant,
        -- 计算转换为RON后的价格
        CASE 
            WHEN moneda = 'EUR' THEN pret * 5
            ELSE pret 
        END AS pret_ron,
        -- 按转换后价格升序排名,最低价格排第1
        RANK() OVER (ORDER BY CASE 
            WHEN moneda = 'EUR' THEN pret * 5
            ELSE pret 
        END ASC) AS price_rank
    FROM Produs
) t
WHERE price_rank = 1;

说明:RANK()会保留并列结果,如果有多个产品转换后价格相同且为最低值,会全部返回;若只需返回任意一个最低价格的产品,可改用ROW_NUMBER()。

方法2:子查询获取最低转换价后关联匹配

SELECT model, fabricant
FROM Produs
WHERE (CASE 
        WHEN moneda = 'EUR' THEN pret * 5
        ELSE pret 
    END) = (
        SELECT MIN(CASE 
            WHEN moneda = 'EUR' THEN pret * 5
            ELSE pret 
        END)
        FROM Produs
    );

说明:先计算所有产品转换为RON后的最低价格,再筛选出转换后价格等于该最低值的产品。

内容的提问来源于stack exchange,提问作者Alex Catruc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:50:26