繁体   English   中英

在MySQL中获取MAX MIN

[英]Fetching MAX MIN in mysql

原始小提琴

尝试失败

查询失败

我需要一些帮助在同一行中拉出每个品牌最昂贵和最便宜的产品,结果应该是这样的:

BRAND_NAME  EX_PRODUCT_ID   EX_NAME EX_PRICE  CHEAP_NAME  CHEAP_PRODUCT_ID  CHEAP_PRICE
HTC         7               Item G  700       Item A         1                500
Sony        5               Item B  100       Item F         2                10
Nokia       4               Item D  260       Item C         3                250

但是以下查询与相应产品的MAX(price)MIN(price)不匹配:

BRAND_NAME  EX_PRODUCT_ID   EX_NAME EX_PRICE CHEAP_NAME CHEAP_PRODUCT_ID CHEAP_PRICE
HTC         1               Item A   700     Item A     1                500
Sony        2               Item B   100     Item B     2                10
Nokia       3               Item C   260     Item C     3                250


SELECT t1.brand_name,t1.ex_product_id,t1.ex_name,
       t1.ex_price,
       t2.cheap_name,t2.cheap_product_id,
       t2.cheap_price        
FROM(

  SELECT m.product_id AS ex_product_id,
       m.name AS ex_name,
       MAX(m.price) AS ex_price,
       b.brand_name 
   FROM model m 
   INNER JOIN series s ON s.series_id = m.series_id
   INNER JOIN brand b ON b.brand_id = s.brand_id
   LEFT JOIN (
       SELECT m.product_id,
           m.name,
           MAX(m.price) AS ex_price
        FROM model m   
   )ex ON ex.ex_price = ex_price  /*** problem here*****/
       AND ex.product_id = m.product_id   
   GROUP BY b.brand_id
)t1

JOIN (
  SELECT m.product_id AS cheap_product_id,
         m.name AS cheap_name,
         MIN(m.price) AS cheap_price,
         b.brand_name 
   FROM model m 
   INNER JOIN series s ON s.series_id = m.series_id
   INNER JOIN brand b ON b.brand_id = s.brand_id
   INNER JOIN(
     SELECT m.product_id,
           m.name,
           MIN(m.price) AS ch_price
        FROM model m   

   )ch  ON ch.ch_price = cheap_price   /*** problem here*****/
        AND ch.product_id = m.product_id 
   GROUP BY b.brand_id
)t2 ON t2.brand_name = t1.brand_name


LIMIT 10

谁能指出我如何将每个品牌的最高和最低价格与相应的昂贵和廉价产品相匹配? 我的查询显然无法识别on子句中的MAXMIN列。

如果我理解正确,则可以使用条件聚合来实现。 只需在子查询中找到最低和最高价格,然后将数据提取出来即可:

  SELECT b.brand_name,
         minmax.price_max,
         max(case when m.price = minmax.price_max then m.product_id end) as max_product_id,
         max(case when m.price = minmax.price_max then m.name end) as max_name,
         minmax.price_min,
         max(case when m.price = minmax.price_min then m.product_id end) as min_product_id,
         max(case when m.price = minmax.price_min then m.name end) as min_name
   FROM model m INNER JOIN
        series s
        ON s.series_id = m.series_id INNER JOIN
        brand b
        ON b.brand_id = s.brand_id INNER JOIN
        (SELECT m.product_id, m.name,
                MIN(m.price) AS price_min,
                MAX(m.price) AS price_max
        FROM model m   
       ) minmax
       ON m.price IN (minmax.price_min, minmax.proc_max) AND 
          minmax.product_id = m.product_id   
   GROUP BY b.brand_id

请注意,如果有多个具有相同最低价格或最高价格的产品,则会抽取出任意一个。 您可以使用group_concat()而不是max()来获得所有这些信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM