MySQL - 多次计数,最小值,最大值查询

时间:2012-03-14 22:09:05

标签: mysql group-by

SELECT
`name`, count(`cid`) AS count, Min(`price-3`) AS min, Max(`price-3`) AS max
FROM ed_prices
WHERE type="M"
GROUP BY cid, type

这个查询给了我我想要的类型M的东西。但是我有4种不同的类型,比如M,并且每个类型的结果都是必要的。虽然这个查询给我一个这样的结果:

name, count, min, max

我需要这样的结果:

name, countM, minM, maxM, countP, minP, maxP, countZ, minZ, maxZ ...

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

我知道这并不是你想要的,但你可以使用它吗?

SELECT `name`
      , type                     -- you'll want to include the type for each line item 
                                 -- to be able to identify which type the values refer to
      , count(`cid`) AS count
      , Min(`price-3`) AS min
      , Max(`price-3`) AS max          
FROM ed_prices
WHERE type IN ("M","P","Z","Q")  -- where M, P, Z, Q are the different product types
GROUP BY cid, type

您还可以尝试自行加入以将结果合并到一个中,以便按照您在问题中的要求获得结果,但对于少数产品以外的其他任何产品都不具备可扩展性..

SELECT `name`
      , countM
      , minM
      , maxM
      , countZ
      , minZ
      , maxZ
      , countP
      , minP
      , maxP
      , countQ
      , minQ
      , maxQ
  FROM 
       (SELECT `name`
              , count(`cid`) AS countM
              , Min(`price-3`) AS minM
              , Max(`price-3`) AS maxM
          FROM ed_prices
         WHERE type = "M"
         GROUP BY cid) MType
  INNER JOIN 
       (SELECT `name`
              , count(`cid`) AS countP
              , Min(`price-3`) AS minP
              , Max(`price-3`) AS maxP
          FROM ed_prices
         WHERE type = "P"
         GROUP BY cid) PType ON MType.`name` = PType.`name`
  INNER JOIN 
       (SELECT `name`
              , count(`cid`) AS countZ
              , Min(`price-3`) AS minZ
              , Max(`price-3`) AS maxZ
          FROM ed_prices
         WHERE type = "Z"
         GROUP BY cid) ZType ON MType.`name` = ZType.`name`
  INNER JOIN 
       (SELECT `name`
              , count(`cid`) AS countQ
              , Min(`price-3`) AS minQ
              , Max(`price-3`) AS maxQ
          FROM ed_prices
         WHERE type = "Q"
         GROUP BY cid) QType ON MType.`name` = QType.`name`
相关问题