【问题标题】:SQL Server : mark the biggest percentage value in a tableSQL Server:标记表中的最大百分比值
【发布时间】:2018-04-09 20:20:04
【问题描述】:

我有点怀疑,我正在使用Northwind 数据库做一些练习。我正在尝试获得一份按年份显示出货量的报告,以及每个航运公司的出货总数。它还需要显示该公司完成的发货百分比,然后需要显示哪家公司发货最多(“X”表示发货最多的公司,“-”表示其余发货),例如代码的注释部分:

IF (Perc > 36, "X", "-")

我已经有了部分代码,我只是在努力处理最后一部分。

这是我所拥有的:

SELECT 
    /* First we get the years. */
    DISTINCT YEAR(P.OrderDate) AS 'ShipYear',

    /* Now we get the names of the different shipping agencies. */
    (SELECT Shippers.CompanyName
     FROM dbo.Shippers
     WHERE Shippers.ShipperID = P.ShipVia) AS 'Shipper',

    /* The next step is counting the total of shipments *
     *  of that year with that company.                 */
    (SELECT COUNT(C.ShipVia)
     FROM dbo.Orders AS C
     WHERE YEAR(C.OrderDate) = YEAR(P.OrderDate)
       AND C.ShipVia = P.ShipVia) AS 'Shipments',

    /* Now we get it's percentage. */
    (SELECT (COUNT(C.ShipVia) * 100 / 
                        (SELECT COUNT(*)
                         FROM dbo.Orders AS CC
                         WHERE YEAR(CC.OrderDate) = YEAR(P.OrderDate)))
     FROM dbo.Orders AS C
     WHERE YEAR(C.OrderDate) = YEAR(P.OrderDate)
       AND C.ShipVia = P.ShipVia) AS 'Perc'

    --IF (Perc > 36, "X", "-")
FROM 
    [dbo].[Orders] AS P
WHERE 
    P.OrderDate IS NOT NULL
ORDER BY 
    YEAR(P.OrderDate)
GO

这是报告的截图:

非常感谢您的帮助!

【问题讨论】:

    标签: sql max percentage northwind


    【解决方案1】:

    您正在寻找窗口函数,使用 OVER 子句。

    您没有指定您使用的数据库,所以我链接到上面的 Microsoft SQL Server。

    由于Perc 列是一个子查询,您应该将您的SELECT 语句包装成另一个这样的语句:

    SELECT 'ShipYear', 'Shipper', 'Shipments', 'Perc'
         , MAX('Perc') OVER (PARTITION BY 'ShipYear') AS `MaxPerc`
      FROM ( // your query goes here
           ) x
    

    这将向您展示它是如何工作的。既然你想要X-,你可以这样做:

    SELECT 'ShipYear', 'Shipper', 'Shipments', 'Perc'
         , CASE WHEN 'Perc' = MAX('Perc') OVER (PARTITION BY 'ShipYear')
                THEN 'X'
                ELSE '-'
           END AS 'Best'
      FROM ( // your query goes here
           ) x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多