SQL: создать столбец, который подсчитывает вхождения значений другого столбца [дубликаты]

avatar
Arcyno
1 июля 2021 в 17:00
67
2
-1

У меня есть таблица с:

ID | name
 1 | aaa
 2 | aaa
 3 | bbb
 4 | aaa

И я хотел бы получить количество столбца "имя" в другом столбце:

ID | name | name_count
 1 | aaa  | 3
 2 | aaa  | 3   
 3 | bbb  | 1
 4 | aaa  | 3

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

Источник
forpas
1 июля 2021 в 17:06
0

Отметьте только базу данных, которую вы используете.

Ответы (2)

avatar
Gordon Linoff
1 июля 2021 в 17:01
2

Вы хотите count(*) в качестве функции окна:

select t.*, count(*) over (partition by name) as name_count
from t;
Arcyno
1 июля 2021 в 17:23
0

Как изменить это на запрос UPDATE, чтобы заполнить существующий столбец? Это не работает: UPDATE t SET name_count= count(ID) over(partition by name)

Arcyno
1 июля 2021 в 17:31
1

Удалось это сделать: UPDATE t SET name_count = (SELECT count(ID) over(partition by name) FROM t)

avatar
Bill Karwin
1 июля 2021 в 17:05
1

Если вам нужно решение, которое работает без оконных функций (т.е. вы все еще используете MySQL 5.x):

select t.id, t.name, c.name_count
from t
join (
  select name, count(*) as name_count
  from t
  group by name 
) as c using (name);