Это был запрос от кого-то из моего отдела, но у меня возникли проблемы с записью, чтобы иметь как общее количество вхождений в столбце, так и сохранить строки.
Для простоты таблица, подобная этой:
Name Location
Dave Ohio
Sam Ohio
James Virginia
Fred Idaho
Cindy Virginia
John Ohio
Но мне нужно, чтобы это выглядело так:
Name Location Total
Dave Ohio 3
Sam Ohio 3
John Ohio 3
James Virginia 2
Cindy Virginia 2
Fred Idaho 1
Итак, моя попытка:
select Name, Location, count(Location) as 'Total'
from table1
group by Location
Дает мне
Name Location Total
Fred Idaho 1
Dave Ohio 1
John Ohio 1
Sam Ohio 1
Cindy Virginia 1
James Virginia 1
Вы можете использовать функции окна
select distinct name, location, count(*) over(partition by location)
from table1
Это работает от MySQL >= 8
Вы можете попробовать это, напишите подзапрос, чтобы получить COUNT
по Location
затем присоединиться к JOIN
SELECT
t.Name,t.Location,t1.Total
FROM
T t
INNER JOIN
(SELECT Location,count(*) Total
FROM T
GROUP BY Location) t1 ON t.Location = t1.Location
ORDER BY
t1.Total DESC
SQLfiddle: http://sqlfiddle.com/#!9/cef8cf/3
Результат
| Name | Location | Total |
+-------+----------+-------+
| Sam | Ohio | 3 |
| John | Ohio | 3 |
| Dave | Ohio | 3 |
| James | Virginia | 2 |
| Cindy | Virginia | 2 |
| Fred | Idaho | 1 |