代码之家  ›  专栏  ›  技术社区  ›  arsarc

SQL统计仍具有所有行值时发生的事件

  •  0
  • arsarc  · 技术社区  · 7 年前

    这是我部门的某个人提出的请求,但我在编写列中的总发生次数和保留行数时遇到问题。

    为了简单起见,这样的表:

    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 回复  |  直到 7 年前
        1
  •  1
  •   tourist    7 年前

    可以使用窗口函数

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

    这是从 MySQL >= 8

        2
  •  1
  •   marc_s    7 年前

    你可以试一下,写一个子查询 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 |