sql按2列分组

pbossiut  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(306)

我想在多行中显示一次,使用2 groupby
我的table是这样的

+----+----------+-------+
    | 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    |
        -------------------------------------------
fxnxkyjh

fxnxkyjh1#

你的描述建议我做条件聚合:

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;
vlju58qv

vlju58qv2#

有了这个,每个牌子就有一种
选择品牌,最大(类型)作为类型,计数(*)作为商店总数
按品牌分组

ecr0jaav

ecr0jaav3#

使用 Group_Concat 函数 Distinct 子句下,可以在逗号分隔的字符串中获取所有不同且唯一的类型 brand 组。
使用 Sum 函数来计算总数
请尝试以下操作:

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

相关问题