sql - 在 GROUP BY 和 COUNT 之后加入另一个表

标签 sql count group-by left-join aggregate-functions

我试图弄明白正确的使用方式 JOIN , COUNT(*) , 和 GROUP BY做一个非常简单的查询。我实际上已经让它工作了(见下文),但从我读到的内容来看,我正在使用一个额外的 GROUP BY我不应该是。

(注意:下面的问题不是我的实际问题(它处理更复杂的表),但我试图提出一个类似的问题)

我有两个表:

Table: Person
-------------
key  name     cityKey
1    Alice    1
2    Bob      2
3    Charles  2
4    David    1

Table: City
-------------
key  name
1    Albany
2    Berkeley
3    Chico

我想对返回的 People(带有一些 WHERE 子句)进行查询
  • 每个城市的匹配人数
  • 城市 key
  • 城市的名字。

  • 如果我做
    SELECT COUNT(Person.key) AS count, City.key AS cityKey, City.name AS cityName
    FROM Person 
    LEFT JOIN City ON Person.cityKey = City.key 
    GROUP BY Person.cityKey, City.name
    

    我得到了我想要的结果
    count   cityKey   cityName
    2       1         Albany
    2       2         Berkeley
    

    但是,我已经 read扔在最后一部分 GROUP BY条款( City.name )只是为了让它工作是错误的。

    那么这样做的正确方法是什么?我一直在尝试用谷歌搜索答案,但我觉得有一些基本的东西我没有得到。

    最佳答案

    我不认为在这种情况下它是“错误的”,因为您在城市名称和城市 key 之间建立了一对一的关系。你可以重写它,这样你就可以加入一个子选择,通过键来获取城市的人数,再次进入城市表以获取名称,但这是有争议的,这会更好。我猜这是一个风格和观点的问题。

    select PC.ct, City.key, City.name
      from City
      join (select count(Person.key) ct, cityKey key from Person group by cityKey) PC
        on City.key = PC.key
    

    如果我的 SQL 不是太生疏:-)

    关于sql - 在 GROUP BY 和 COUNT 之后加入另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3080024/

    相关文章:

    sql - 是否可以在一条语句中始终更新一列并有条件地更新另一列?

    php - PHP-查询解析错误(MySQLI)

    mysql - mysql中的count()函数

    mysql - 如何在 SQL 中有条件地计算值

    mysql - 在 MySql 中执行查询时与 only_full_group_by 相关的错误

    mysql - 在不同数据库的表之间传输行

    php - GROUP BY 外键还是主键?

    sql-server - SQL Server GROUP BY、SUM 和检索列值

    sql - 如何使用postgresql按计数排序?

    sql - 使用 max 查找最常出现的 column_name