Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sql在仍然具有所有行值的情况下计算发生次数_Mysql_Sql - Fatal编程技术网

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
,然后self
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:

结果

|  Name | Location | Total |
+-------+----------+-------+
|   Sam |     Ohio |     3 |
|  John |     Ohio |     3 |
|  Dave |     Ohio |     3 |
| James | Virginia |     2 |
| Cindy | Virginia |     2 |
|  Fred |    Idaho |     1 |

您可以尝试这样做,编写一个子查询,通过
Location
获取
COUNT
,然后self
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:

结果

|  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?