【问题标题】:Help forming a SQL statement帮助形成 SQL 语句
【发布时间】:2010-08-02 02:03:07
【问题描述】:

我有两张表:景点和城市。 Attractions 包含一个名为 city 的列,它是对ities 表中 id 的引用。我想形成一个 MySQL 语句,告诉我哪些城市最吸引人。

我知道我能做到:

SELECT COUNT(*) as `number` 
 FROM `attractions` 
WHERE `city` = XX 

...要统计一个城市有多少个景点,但是有没有一个语句可以统计每个城市的所有景点,并按景点数量降序返回结果?

【问题讨论】:

    标签: sql mysql count group-by


    【解决方案1】:
    SELECT City.Name, COUNT(Attractions.City) as AttractionCount
    FROM City
    LEFT OUTER JOIN Attractions ON City.City = Attractions.City
    GROUP BY City.Name
    ORDER BY COUNT(Attractions.City) DESC
    

    【讨论】:

    • 也许您应该用 City.id 替换 City.City?此外,请按 City.id 而不是 City.Name 分组,因为可能有多个同名城市(在不同的省或州)。
    • 是的,这是一个不错的选择。但是,问题表明 Attractions 中的列名为 City。
    • 完美运行!谢谢!而且按 id 而不是按名称分组确实更有意义。
    • 可能是COUNT(Attractions.City)而不是COUNT(*),因为一个城市可能有0个景点(基于左外连接)?
    • @Mark,你可能是对的,区分 COUNT() 和 COUNT() 很重要。但我不确定在这种情况下是否重要。 COUNT() 将返回返回的行数,如果没有与城市关联的景点,则返回 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多