繁体   English   中英

SQL Group by 2列

[英]SQL Group by 2 column

我希望使用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    |
        -------------------------------------------
  • 使用带有Distinct子句的Group_Concat函数,您可以在brand组下的逗号分隔字符串中获取所有不同且唯一的类型。
  • 使用Sum函数计算总数

请尝试以下方法:

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

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

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;

有了这个你就会得到每个品牌一种类型

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

暂无
暂无

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

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