我想用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 |
-------------------------------------------
答案 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品牌