Как считать данные в одной таблице? - PullRequest
0 голосов
/ 13 января 2020

Я довольно новичок в SQL, борюсь с этим.

У меня есть большая таблица, и я пытаюсь подсчитать, сколько фигур имеет каждое имя и сколько размерных форм имеет каждое имя.

Name  Shape      Size  
Dave  rectangle  Small    
John  square     Medium  
Matt  rectangle  Small  
Dave  square     Large  
John  rectangle  Medium  
Matt  square     Small 

Я хочу, чтобы результаты выглядели так

Name    Shape count Size count  
Dave    Square  3    large 1

Извините, если это не так, как это должно быть изложено - пытаясь автоматизировать некоторые отчеты, которые в противном случае мне приходилось бы делать вручную ежемесячно.

Спасибо, Мэтт

1 Ответ

0 голосов
/ 13 января 2020

Я думаю, вы хотите, чтобы две агрегации были выстроены по имени. Если это так, это не встроенная способность в SQL, но вы можете сконструировать запрос, чтобы сделать то, что вы хотите:

select name, max(shape) as shape, max(shape_cnt),
       max(size) as size, max(size_cnt)
from ((select name, shape, 0 as size_cnt, count(*) as shape_cnt,
              row_number() over (order by count(*) desc) as seqnum
       from t
       group by name, shape
      ) union all
      (select name, size, 0, count(*),
              row_number() over (order by count(*) desc) as seqnum
       from t
       group by name, size
      ) 
     ) nss
group by name, seqnum;     
...