0

クエリで最高値を取得したい

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 です。

4

5 に答える 5

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
于 2014-12-03T14:43:36.997 に答える
0

でグループ化しDay、並べ替えてCOUNT(*) DESC、トップカウントを取得できます。

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

Day出力に含めて、最高の結果が得られた日を返すこともできます。

于 2014-12-10T10:14:46.210 に答える
0

以下のクエリは、パフォーマンスの点で優れており、意図をよりよく強調していると思います。基本的には、日ごとにグループ化してグループをカウントしているだけなので、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
于 2014-12-03T15:03:22.057 に答える