Sql Подсчитайте вхождения, сохранив все значения строк. - PullRequest
0 голосов
/ 03 июля 2018

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

Для простоты, таблица выглядит так:

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

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Вы можете использовать оконные функции

select distinct name, location, count(*) over(partition by location) 
from table1

Это работает с MySQL >= 8

0 голосов
/ 03 июля 2018

Вы можете попробовать это, написать подзапрос, чтобы получить 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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...