Sql Подсчитайте вхождения, сохранив все значения строк.

0

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

Для простоты таблица, подобная этой:

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
  • 0
    Какой вкус SQL вы используете?
Теги:

2 ответа

1
Лучший ответ

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

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

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

1

Вы можете попробовать это, напишите подзапрос, чтобы получить 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 |

Ещё вопросы

Сообщество Overcoder
Наверх
Меню