2012-03-24 4 views
0

私は次のような構造を持つテーブルから各部門で最大の入学を持つクラスを選択しようとしています:MySQLは最大行数を数える

コース:CID、DEPT、名前

登録:CID、SIDを

考え方は、各クラスのすべての登録を数え、各部門で最大値を見つけることです。残念ながら、私は最大数の組み合わせに問題があります。

私のクエリは次のようなものを見に行っていた。

SELECT c.name, MAX(COUNT(*) FROM Enrollment E WHERE E.cid = C.cid) 
FROM Courses C 
GROUP BY C.dept 

しかし、私は正しく動作するMAX-COUNT構文を取得する方法を見つけ出すことはできません。私は、GoogleとStackOverflowからさまざまな例を試してみましたが、どれも私のために働いていませんでした。 MySQLは構文が間違っていると言います。

+0

「Courses」テーブルはどこですか? – Lion

+0

申し訳ありませんが、私は頭の上から質問を書いています。一定。 –

答えて

2

Iを行い、だから、E.cid

を使用することはできませんので、Eのない宣言は、ありませんこのような問題のネストされたクエリのようなものです。まず、クラスごとにグループ化された登録数を選択します。次に、部門ごとにグループ化された最大登録件数を確認します。

SELECT MAX(cnt) cnt, dept FROM 
(
    SELECT COUNT(*) cnt, dept, C.cid 
    FROM Courses C 
     INNER JOIN Enrollment E on C.cid = E.cid 
    GROUP BY cid, dept 
) a 
GROUP BY dept 
+0

ありがとう、私が書いた質問に何が間違っていたのですか?これはSQLとMySQLの違いですか? –

+0

質問にはいくつか問題があると思います。 1つ:集合文の場合、選択する各列は集合関数またはgroup by節のいずれかでなければなりません。 "select name、max(something)group by dept"は動作しません。 – McGarnagle

0

あなたはどちらかあなたがこの

SELECT c.name, COUNT(c.*) as count 
FROM Courses C 
GROUP BY C.dept 

あるいは、

SELECT c.name, MAX(SELECT COUNT(*) FROM Enrollment E WHERE E.cid = C.cid) 
FROM Courses C 
GROUP BY C.dept 
0
SELECT MAX(cnt) FROM (
    SELECT c.name, COUNT(E.*) AS cnt FROM Enrollment E 
    INNER JOIN Courses C ON E.cid = C.cid 
    GROUP BY C.dept 
) final 
関連する問題