Mysql Sql在仍然具有所有行值的情况下计算发生次数
这是我所在部门的某个人提出的请求,但我在编写时遇到了一些问题,即既要在列中显示出现的总数,又要保留行 为简单起见,请使用如下表格:Mysql Sql在仍然具有所有行值的情况下计算发生次数,mysql,sql,Mysql,Sql,这是我所在部门的某个人提出的请求,但我在编写时遇到了一些问题,即既要在列中显示出现的总数,又要保留行 为简单起见,请使用如下表格: Name Location Dave Ohio Sam Ohio James Virginia Fred Idaho Cindy Virginia John Ohio Name Location Total Dave Ohio 3 Sam Ohio 3 J
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
但我需要它看起来像这样:
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
您可以尝试这样做,编写一个子查询,通过
Location
获取COUNT
,然后selfJOIN
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:
结果
| Name | Location | Total |
+-------+----------+-------+
| Sam | Ohio | 3 |
| John | Ohio | 3 |
| Dave | Ohio | 3 |
| James | Virginia | 2 |
| Cindy | Virginia | 2 |
| Fred | Idaho | 1 |
您可以尝试这样做,编写一个子查询,通过
Location
获取COUNT
,然后selfJOIN
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:
结果
| Name | Location | Total |
+-------+----------+-------+
| Sam | Ohio | 3 |
| John | Ohio | 3 |
| Dave | Ohio | 3 |
| James | Virginia | 2 |
| Cindy | Virginia | 2 |
| Fred | Idaho | 1 |
您可以使用窗口函数
select distinct name, location, count(*) over(partition by location)
from table1
这可以从
MySQL>=8
使用窗口函数
select distinct name, location, count(*) over(partition by location)
from table1
这适用于
MySQL>=8
您使用的是什么风格的SQL?您使用的是什么风格的SQL?