【问题标题】:Get the Highest Value in different Select SUM在不同的 Select SUM 中获取最高值
【发布时间】:2014-12-03 14:34:06
【问题描述】:

我想在我的查询中获得最高值

Select SUM(CASE WHEN Day='Monday' THEN 1 END) AS'Total Monday',
       SUM(CASE WHEN Day='Tuesday' THEN 1 END) AS'Total Tuesday'  
FROM tbl_sched 
WHERE teacherID='2014279384'

输出将是 TotalMonday ='1' 和 TotalTuesday ='2'
我需要从输出中获取最高值,在这种情况下是 TotalTuesday=2

【问题讨论】:

    标签: sql sql-server highest


    【解决方案1】:
    select max(daycnt) from
    (Select SUM(CASE WHEN Day='Monday' THEN 1 END) AS daycnt
     from tbl_sched WHERE teacherID='2014279384'
    union all
    Select SUM(CASE WHEN Day='Tuesday' THEN 1 END) AS daycnt
     from tbl_sched WHERE teacherID='2014279384')
    

    【讨论】:

      【解决方案2】:

      如果您需要多列之间的最大值:

      SQLServer 2008 及以上的一些有趣的东西

      SELECT  (SELECT Max(v) 
      FROM (VALUES ([Total Monday]), ([Total Tuesday]), ...) AS value(v)) as [MaxDate]
      From
      (   
          Select SUM(CASE WHEN Day='Monday' THEN 1 END) AS'Total Monday',
                 SUM(CASE WHEN Day='Tuesday' THEN 1 END) AS'Total Tuesday'  
                  ..........
          FROM tbl_sched 
          WHERE teacherID='2014279384'
          )a  
      

      另一种选择:

      SELECT Case When [Total Monday] > [Total Tuesday] then [Total Monday] else [Total Tuesday] End as maxvalue
      FROM 
      (   
          Select SUM(CASE WHEN Day='Monday' THEN 1 END) AS'Total Monday',
                 SUM(CASE WHEN Day='Tuesday' THEN 1 END) AS'Total Tuesday'  
          FROM tbl_sched 
          WHERE teacherID='2014279384'
          )a
      

      【讨论】:

        【解决方案3】:

        我想说下面的查询在性能方面更好,并且更好地突出了意图,因为基本上我们只是按天分组并计数组,我们不需要 CASE 或 SUM(在这种情况下 SQL Server 将必须检查所选教师的所有记录)。

        SELECT   TOP 1 Day, COUNT(*) AS Total
        FROM     tbl_sched 
        WHERE    teacherID='2014279384'
        AND      Day IN ('Monday','Tuesday')
        GROUP BY Day
        ORDER BY Total DESC
        

        【讨论】:

          【解决方案4】:

          您可以按Day 分组,按COUNT(*) DESC 排序并获得最高计数:

          SELECT TOP (1)
            TotalCount = COUNT(*)
          FROM
            dbo.tbl_sched
          WHERE
            teacherID = '2014279384'
          GROUP BY
            Day
          ORDER BY
            TotalCount DESC
          ;
          

          您还可以在输出中包含Day 以返回结果最高的日期。

          【讨论】:

            【解决方案5】:

            你可以通过使用 Max Function 来实现这一点

            Select MAX(SUM(CASE WHEN Day='Monday' THEN 1 END)) AS 'Total Monday',
               MAX(SUM(CASE WHEN Day='Tuesday' THEN 1 END)) AS 'Total Tuesday'  
            FROM tbl_sched 
            WHERE teacherID='2014279384'
            

            【讨论】:

            • 这将给出与问题完全相同的内容。我认为这是错误的
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-06-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-20
            • 1970-01-01
            • 2010-10-28
            相关资源
            最近更新 更多