【问题标题】: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'