2016-04-13 8 views
1

このサイトではこれらの質問に対して別々の回答が見つかりましたが、これらを1つのクエリにまとめることができるかどうかを知りたいと思います。(COUNT()を使用して)行のSUM()の次に大きな値を取得できますか?

私はCourseIDとStudentIDを含むFollowsCourseテーブルを持っています。 CourseIDごとにStudentIDの行の合計を計算し、結果の出力の2番目に大きな値を取得することによって、学生の数量を取得したいと思います。

どこから始めたらいいかわからないので、大歓迎です!

EDIT

コードまたは所望の結果を追加しないためすみません。私は明確にしようとします!

目的の結果は次のようになり、私はLIMITを使用しないことを追加するのを忘れ、質問(と、それはOFFSETオプションのパラメータです)

を求めた場合:

Example Table FollowsCourse 
    | StudentID | CourseID | 
    |  1  | 1  | 
    |  2  | 1  | 
    |  3  | 2  | 
    |  4  | 2  | 
    |  5  | 2  | 
    |  6  | 1  | 
    |  7  | 1  | 
    |  8  | 3  | 

    result: 
    | CourseID | Sum of Count | 
    | 1  |  4  | 
    | 2  |  3  | 
    | 3  |  1  | 

その後、何とか私がする必要があるでしょうだから、2

はPS私はMOを追加する必要があることを指摘して感謝して質問をすると多くの経験を持っていないCourseIDことと思います。この場合のカウント(の二番目に大きい和とCourseIDを取得私の質問についての情報。

+0

良い場所にするために使用されていますあなたの質問にサンプルデータと希望の結果*を提供することです。これは、あなたと他の人の両方があなたがしていることを理解するのに役立ちます。 –

+6

クエリ「ASC」(ASCENDING)と「LIMIT 1,1」を注文します(最初の1はオフセットです - 0から2番目の1は行の数です) –

+0

"SELECT CourseID、count(CourseID)GROUP BY CourseID ORDER BY count(CourseID)DESC "は、各行にコースが含まれているリストとコースごとにいくつの生徒がコースごとに最高から最下位に並べられたリストを表示する必要があります。リストをたどって2番目の結果を取得するだけです最高。しかし、私はそれをテストすることができなくてもSQLを書くときに少し間違いがあるので、私は答えとして投稿することを躊躇します。 –

答えて

1

Alon pointed outとして、LIMIT 1,1を使用する必要があります。もちろんグループ化してカウントする必要もあります。

SELECT courseid, 
     Count(studentid) 
FROM followscourse 
GROUP BY courseid 
ORDER BY Count(studentid) DESC 
LIMIT 1, 1 

DEMO

またROWNUMBER技術を使用してこれを行うことができますが、それははるかに複雑だと一般的にのみ問題

SELECT 
    courseid, 
    kount 
FROM 

    (SELECT  @num := @num + 1 AS row_number, 
       courseid, 
       kount 

     FROM  ( 
          SELECT courseid, 
            Count(studentid) kount 
          FROM  followscourse 
          GROUP BY courseid 
          ORDER BY Count(studentid) DESC) AS data 
     CROSS JOIN 
       ( 
         SELECT @num := 0) rn) as t 
WHERE 
    row_number = 2 

DEMO

+0

質問の編集でわかるように、LIMITパラメータを使用しない回答が必要です。しかし、助けてくれてありがとう。大変感謝しています。 – Heijmaaans

+0

制限を使用できない理由 –

関連する問題