私はこれに頭をぶつけてきました。私は近いと思います。(オラクル、SQL)
次のようなテーブルがあります。
Company Code
Apple A
Google A
Microsoft B
Apple C
Google B
Microsoft B
Apple C
Google C
Microsoft B
各企業は複数のコードに解決できます。私がやりたいことは、各会社について、最も頻繁に現れるコードを持つ会社を提供する SQL ステートメントを作成することです。だから私の例では、私は得るだろう
Apple C
Google <nothing since there's no clear max>
Microsoft B
これまでにまとめたものは次のとおりです。このクエリは、コードが最も多く表示される会社を返しますが、ある会社の 2 つのコードが一致している場合は、両方が返されます。私の例の Google の場合、(Google, A), (Google, B), (Google, C) を取得します。何も返してほしくない。
重複した会社を除外するために、すべてをそれ自体といくつかの追加の where 句で再び結合できると思いますが、これを行うためのより良い方法があるかどうか疑問に思っていました。私を殺しているのは、Oracleの単一グループグループエラーが発生することがあるため、group byと一緒の集計関数です。任意の提案をいただければ幸いです。
SELECT m1, c.company sp1, b.code ul1 FROM
(SELECT MAX(c1) m1, company FROM
(SELECT COUNT(company||code) c1, company, code FROM table GROUP BY company, code ) a
GROUP BY company) c
left OUTER JOIN
(SELECT COUNT(company||code) c1, company, code FROM table GROUP BY company, code ) b
ON c.company=b.company and
m1=b.c1;
mj