2014-12-03 4 views
0

Я хочу, чтобы получить наибольшее значение в моем запросеПолучить Наибольшее значение в различных 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

ответ

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') 
-1

Вы можете добиться этого с помощью функции Max

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' 
+0

это даст точно так же, как в вопросе. Я думаю, что это неправильно – mounaim

1

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

что-то интересное в 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 
0

Я бы сказал, что ниже запрос лучше с точки зрения производительности и подчеркивает намерение лучше, потому что в основном мы просто GROUPing by days и COUNTing для групп, нам не нужны 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 
0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^