もう一つの一般的な解決策を取得します。この
select a.title,a.grade from
(Select class.title, studentClass.grade,
row_number() over (partition by class.title order by studentClass.grade) as rn
from classOffering inner join studentClass on classOffering.classID = studentClass.classID
inner join class on classOffering.classID = class.classID
group by class.title, studentClass.grade)a
where a.rn=1;
ような何かを試みることができますこの問題は、テーブル自体に戻ってきています。 Here is a SQL Fiddle that tests this answer:
SELECT T3.title, T3.grade, T2.maxcount
FROM (
SELECT title, max(count) as maxcount
FROM (
Select class.title, studentClass.grade, count(studentClass.grade) as count
from classOffering
inner join studentClass on classOffering.classID = studentClass.classID
inner join class on classOffering.classID = class.classID
group by class.title, studentClass.grade
) AS T1
GROUP BY title
) AS T2
JOIN (
Select class.title, studentClass.grade, count(studentClass.grade) as count
from classOffering
inner join studentClass on classOffering.classID = studentClass.classID
inner join class on classOffering.classID = class.classID
group by class.title, studentClass.grade
) AS T3 ON T2.title = T3.title AND T2.maxcount = T3.count
ORDER BY T3.title, T3.grade, T2.maxcount
しかし、私はグレードの出現の最大数を考慮することが微調整できるのであれば@cableloadの答えははるかに優れていると思います。
私はこれをたくさん好きです。私はDB管理者にこの解決策を提示してくれましたが、すぐにそれを忘れました。私は実際に 'row_number()over(partition by ... order by ...)'構文をメモリにコミットする必要があります。 – jwatts1980
ええと、私はあなたが学年の出現の数を取得していないことに気づいただけです。それが必要な答えの鍵の1つです。 – jwatts1980
はい、あなたはできませんが、OPはカウントではなくグレードを求めているというコメントに言及しています。私はこれを提案しました。カウントが必要な場合は、このクエリをタイトルとカウントし、次に一致するかもしれません。たぶん、同じクエリを使用してカウントを取得する別の方法です..私は知らない... – cableload