/ / SQL Serverで年間最も人気のある名前を取得する方法 - sql、sql-server

どのようにSQL Serverで年間最も人気のある名前を取得する - sql、sql-server

私はMicrosoft SQL Server 2012(熟練問題ではない)でSQLを練習しており、テーブルを持っています Names。表には、年ごとの赤ちゃんの名前と列 Sex (名前の性別)、 N (その名前の赤ちゃんの数)、 Yr (年)、および Name (名前そのもの)。

私は1つだけを使用してクエリを書く必要があります SELECT 性別、年、名前のある赤ちゃんの数と一緒に、最も人気のある赤ちゃんの名前を年別に返します。これまでのところ私は持っている。

SELECT *
From Names
ORDER By N DESC;

DESCでNの最高値を与えるもの注文、繰り返し年。私はそれを毎年最高値に制限する必要があります。私がしようとしたことはすべてエラーを投げかけています。あなたが私に与えることができるどんなアドバイスも感謝します。

回答:

回答№1は0

私の頭の上から離れて次のようなものは、通常、(技術的に)1つのSELECT文でそれを行うことができます。そのステートメントにはサブSELECTが含まれていますが、私はすぐにはそうではない代替案を見ていません。

ジョイントトップランクの名前があれば、両方クエリはすべての上位の結果を戻す必要があります。したがって、1つの答えが正確に存在しない可能性があります。これらの結果からランダムに1つの代表行が必要な場合は、 select top 1、おそらく order by 最初のアルファベット順を取得します。

性別にかかわらず年々人気がある:

-- ONE PER YEAR:
SELECT n.Year, n.Name, n.Gender, n.Qty FROM Name n
WHERE NOT EXISTS (
SELECT 1 FROM Name n2
WHERE n2.Year = n.Year
AND n2.Qty > n.Qty
)

各性別毎年最も人気がある:

-- ONE PER GENDER PER YEAR:
SELECT n.Year, n.Name, n.Gender, n.Qty FROM Name n
WHERE NOT EXISTS (
SELECT 1 FROM Name n2
WHERE n2.Year = n.Year
AND n2.Gender = n.Gender
AND n2.Qty > n.Qty
)

パフォーマンスは、SQLの冗長性にもかかわらず、通常はこのパターンを使用する際の代替案と同等です(しばしばより良い)。

GROUP文の使用を含む他のアプローチがありますが、個人的に私はこれをより読みやすく、標準的なクロスDBMSと見ています。