SQL группировка по разным уровням в одном наборе данных - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть следующий набор данных, и я надеюсь создать разные группы для подсчета появления значений под именем.

Имею: (округ в строке)

name   state  county 
apple   MD      1
apple   DC      1
pear    VA      1
pear    VA      2
pear    CA      5
peach   CO      3
peach   CO      3
peach   CO      2
peach   CO      2

Хочу:

name   state  county freq_name  freq_state  freq_county
apple   MD      1     2            1            2
apple   DC      1     2            1            2
pear    VA      1     3            2            3
pear    VA      2     3            2            3
pear    CA      5     3            1            3
peach   CO      3     4            4            2
peach   CO      2     4            4            2

Полагаю, по SQL, переразделение позволит подсчитывать по разным уровням что-то вроде:

count(name) over (partition by name) as freq_name,
count(name) over (partition by state) as freq_state,
count(name) as freq_county
from have
group by name,state, county;

По какой-то причине этот кусок кода не дает мне права рассчитывает для freq_name. Я также хочу проверить, точен ли мой код для freq_state и freq_county. Спасибо!

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вы, кажется, хотите:

select name, state, county, count(*) as this_count,
       sum(count(*)) over (partition by name) as freq_name,
       sum(count(*)) over (partition by state) as freq_state,
       sum(count(*)) as freq_county
from have
group by name, state, county;
1 голос
/ 13 февраля 2020

Для freq_name используйте count(*) вместо count(name)

count(*) over (partition by name) as freq_name,
count(name) over (partition by state) as freq_state,
count(name) as freq_county
from have
group by name,state, county;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...