SQL Group by 2列

时间:2018-10-02 09:28:33

标签: mysql sql group-by

我想用2 GROUP_BY在多行中显示一次

我的桌子就是这样

    +----+----------+-------+
    | ID | BRAND |   TYPE    | 
    +----+----------+-------+
    |  1 | A     |  Clothes  | 
    |  2 | A     |  Hat      | 
    |  3 | A     |  Hat      | 
    |  4 | A     |  Hat      | 
    |  5 | B     |  Jeans    | 
    |  6 | B     |  Jeans    | 
    |  7 | B     |  Hat      |
    |  8 | C     |  Clothes  |
    |  9 | C     |  Jeans    |
    | 10 | C     |  Jeans    |
    | 11 | C     |  Hat      | 
    +----+-------+-----------+

这样的查询

SELECT brand, 
       type, 
       COUNT(*) AS total
FROM store  
GROUP BY brand, type

当我运行该查询时,结果是

        -----------------------------
        | BRAND |   TYPE    |  TOTAL |
        -----------------------------
        | A     |  Clothes  |   1    |
        | A     |  Hat      |   3    | 
        | B     |  Jeans    |   2    |
        | B     |  Hat      |   1    |
        | C     |  Clothes  |   1    |
        | C     |  Jeans    |   2    |
        | C     |  Hat      |   1    |
        ------------------------------

那不是我期望的结果。我只想显示一次Brand,如果有多个相同的值,下面的Type也显示一次。

更新:期望结果

        -------------------------------------------
        | BRAND |   TYPE                |  TOTAL |
        -------------------------------------------
        | A     |  Clothes, Hat         |   4    |
        | B     |  Jeans, Hat           |   3    |
        | C     |  Clothes, Jeans, Hat  |   4    |
        -------------------------------------------

3 个答案:

答案 0 :(得分:3)

  • 通过Distinct子句使用Group_Concat函数,您可以在brand组下的逗号分隔的字符串中获得所有不同的 unique 类型。 。
  • 使用Sum函数计算总数

尝试以下操作:

SELECT brand, 
       GROUP_CONCAT(DISTINCT type) As type, 
       SUM(total) AS total
FROM store  
GROUP BY brand

答案 1 :(得分:0)

您的描述建议我进行条件聚合:

SELECT brand, 
       COUNT(DISTINCT CASE WHEN TYPE = 'Clothes' THEN TYPE END) AS Clothes,
       COUNT(DISTINCT CASE WHEN TYPE = 'Hat' THEN TYPE END) AS Hat,
       COUNT(DISTINCT CASE WHEN TYPE = 'Jeans' THEN TYPE END) AS Jeans
FROM store s
GROUP BY brand;

如果您要使用多种类型的一行,则可以使用GROUP_CONCAT

SELECT brand, GROUP_CONCAT(DISTINCT TYPE) As TYPE, COUNT(total) AS total
FROM store s  
GROUP BY brand;

答案 2 :(得分:0)

每个品牌,您都会得到一种

SELECT品牌,       Max(type)AS类型,        总共COUNT(*)个 从商店
GROUP BY品牌