Получить количество каждой подгруппы в основной - PullRequest
1 голос
/ 03 апреля 2019

Я хотел бы получить количество каждой подгруппы, которая появляется в основной группе.

Учитывая следующее:

| Clothing    | Colour
-----------------------
| Shirt       | black   
| Shirt       | black  
| Shirt       | black
| Shirt       | yellow 
| Shoes       | yellow
| Shoes       | yellow
| Shoes       | black

Мой желаемый результат будет:

| A                    | B
---------------------------
| Shirt_Blacks         | 3 
| Shirt_Yellows        | 1
| Shoes_Blacks         | 1
| Shoes_Yellows        | 2

РЕДАКТИРОВАТЬ: Выходной формат 2:

| Clothing       | Black | Yellow
-----------------------------------
| Shirt          | 3     | 1
| Shoes          | 1     | 2

Попробовал следующее без удачи:

SELECT COUNT(Colour) 
FROM [randomtable]
Group By Clothing

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Вы можете группировать по конкату (одежда, '_', цвет):

SELECT
  concat(clothing, '_', colour) A, 
  COUNT(*) B
FROM [randomtable]
Group By concat(clothing, '_', colour) 
1 голос
/ 03 апреля 2019

Использование агрегации:

SELECT CONCAT(Clothing, '_', Colour) A, COUNT(*) B
FROM mytable
GROUP BY Clothing, Colour

Демонстрация на DB Fiddle :

A            |  B
:----------- | -:
Shirt_black  |  3
Shoes_black  |  1
Shirt_yellow |  1
Shoes_yellow |  2

Если вы хотите изменить набор результатов, то:

SELECT 
    Clothing,
    SUM(CASE WHEN Colour = 'Black' THEN 1 ELSE 0 END) Black,
    SUM(CASE WHEN Colour = 'Yellow THEN 1 ELSE 0 END) Yellow
FROM mytable
GROUP BY Clothing
0 голосов
/ 03 апреля 2019
SELECT Clothing+'_'+Colour A, COUNT(*) B
    FROM [randomtable]
GROUP BY Clothing+'_'+Colour

select * from [randomtable]
    pivot
(count(colour) for colour in (black,yellow))AS piv
...