Получите наибольшее значение в разных Select SUM

Я хочу получить наибольшее значение в моем запросе

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

5 ответов

Если вам нужно максимум между многими столбцами:

Что-то интересное в 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
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')

Вы можете просто группировать по Day, Сортировать по COUNT(*) DESC и получить верхний счет:

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

Вы также можете включить Day в вывод, чтобы вернуть день, который имел самый верхний результат.

Я бы сказал, что приведенный ниже запрос лучше с точки зрения производительности и лучше подчеркивает намерение, потому что в основном мы просто группируемся по дням и СЧИТАЕМ группы, нам не нужны 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

Вы можете добиться этого с помощью 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'
Другие вопросы по тегам