[英]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.