【问题标题】:how to use mysql function "min()" with two criteria in one query如何在一个查询中使用具有两个条件的 mysql 函数“min()”
【发布时间】:2015-02-23 20:47:26
【问题描述】:

我有一张物品表,有些是二手的,有些是新的,

我想查询新版本和二手版本的最低价格。

我有一个名为“new”的布尔字段,用于判断该项目是否为二手商品

对于结果我必须做两个查询,但我认为它可能只做一个

查询二手:

SELECT  ref_product, MIN( price ) 
FROM item_list
WHERE new = 0
GROUP BY ref_produit

查询新的:

SELECT  ref_product, MIN( price ) 
FROM item_list
WHERE new = 1
GROUP BY ref_produit

我想要这样的结果:

ref_product | min_price_for _secondhand | min_price_for_new

【问题讨论】:

    标签: mysql min


    【解决方案1】:
    SELECT  ref_product, 
            MIN(case when new = 1 then price else null end) as new_price,
            MIN(case when new = 0 then price else null end) as used_price
    FROM item_list
    GROUP BY ref_product
    

    【讨论】:

    • 很好,每个产品都有一行,包含新产品和二手产品的最低价格。当产品不作为新产品或 SH 提供时,它会为 new_priceused_price 获得 NULL
    • 我认为 MIN(IF(new = 1, price, NULL)) 更短且更具可读性。
    • 谢谢你是我的上帝,这正是我想要的,圣诞快乐
    【解决方案2】:

    new 上删除条件(获取所有产品)并按ref_produit' then bynew 分组:

    SELECT ref_product, new, MIN(price) AS min_price
    FROM item_list
    GROUP BY ref_produit, new
    

    【讨论】:

    • 此查询获取新产品和旧产品的不同行(如果有)。它们可以通过检查new列的值来检测。
    • 不错,它不是我想要的,但至少我在一个查询中就有了我需要的信息,谢谢
    【解决方案3】:

    尝试类似:

    SELECT ref_product, MIN( price ) 
    FROM item_list 
    WHERE new in (0,1)
    GROUP BY new, ref_product
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      相关资源
      最近更新 更多