【问题标题】:How to get most popular name by year in SQL Server如何在 SQL Server 中按年份获取最受欢迎的名称
【发布时间】:2015-12-13 18:37:46
【问题描述】:

我正在 Microsoft SQL Server 2012 中练习 SQL(不是作业问题),并且有一个表 Names。该表按年份显示婴儿姓名,列Sex(姓名性别)、N(具有该姓名的婴儿数量)、Yr(年份)和Name(姓名本身)。

我只需要使用一个SELECT 语句编写一个查询,该语句按年份返回最受欢迎的婴儿名称,包括性别、年份和命名婴儿的数量。到目前为止我有;

SELECT *
From Names
ORDER By N DESC;

以 DESC 顺序给出 N 的最高值,重复年份。我需要将其限制为每年的最高值,而我所做的一切都引发了错误。您可以为此提供任何建议,我们将不胜感激。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    在我的脑海中,像下面这样的事情通常会让你在(技术上)一个 SELECT 语句中做到这一点。该语句包括子 SELECT,但我没有立即看到不会的替代方案。

    当有联合排名靠前的名字时,两个查询都应该返回所有联合排名靠前的结果,因此可能不会有一个确切的答案。如果您只需要这些结果中的随机单个代表行,请查看使用select top 1,或者添加order by 以按字母顺序获取第一个。

    按年份最受欢迎,不分性别:

    -- ONE PER YEAR:
    SELECT n.Year, n.Name, n.Gender, n.Qty FROM Name n
     WHERE NOT EXISTS (
          SELECT 1 FROM Name n2
           WHERE n2.Year = n.Year
             AND n2.Qty > n.Qty
    )
    

    各性别年度最受欢迎:

    -- ONE PER GENDER PER YEAR:
    SELECT n.Year, n.Name, n.Gender, n.Qty FROM Name n
     WHERE NOT EXISTS (
          SELECT 1 FROM Name n2
           WHERE n2.Year = n.Year
             AND n2.Gender = n.Gender
             AND n2.Qty > n.Qty
    )
    

    尽管 SQL 很冗长,但性能通常与使用此模式时的替代方案相当(通常更好)。

    还有其他方法,包括使用 GROUP 语句,但我个人认为这是一种更具可读性和标准的跨 DBMS。

    【讨论】:

    • 非常感谢!这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2012-03-02
    • 2011-04-25
    • 2020-10-04
    相关资源
    最近更新 更多