この問題のほとんどは、データベース クエリを使用して解決できるはずですが、このクエリをラップする別のプログラミング言語 (JDBC を使用した Java など) が必要になります。ある種の SQL データベースを使用していると仮定します。あなたの構造の見た目から、group by句を使用する必要があると思います。あなたがそれについて言及しなかったので、私はあなたのデータベース構造を知りませんが、このために、あなたのテーブルは「製品」と呼ばれていると言います
まず、各製品の数を取得するクエリを設計しましょう。
SELECT pid, COUNT(*) AS NUM FROM products p GROUP BY pid ORDER BY NUM DESC;
したがって、このクエリは次のようなものを返します。
pid, NUM
pid34 120
pid29 120
pid20 20
そのため、これは近づいていますが、まだ正確には求められていません。しかし、プログラミング言語と組み合わせてクエリを使用することで、簡単に実行できるようになりました。例として、以下のJavaコードを実行しました。
// Assumes that database connection has already been made and is in the variable: conn1
Statement stmt1 = conn1.createStatement();
ResultSet rs1 = stmt1.executeQuery("SELECT pid, COUNT(*) AS NUM FROM products p GROUP BY pid ORDER BY NUM DESC");
int prevNum = -1;
while(rs1.next())
{
int thisNum = rs1.getInt("NUM");
if(thisNum != prevNum)
{
// this means it is a different number than the last result, start a new line
system.out.print("\n" + thisNum + ": ");
prevNum = thisNum;
}
system.out.print(rs1.getString("pid") + ", ");
}
stmt1.close();
conn1.close();
特にフォーマットに関しては、すべてのロジックが正しいとは限りませんが、これにより、必要な方法で正しい道を進むことができます。この問題は、クエリとプログラミング言語の組み合わせを使用して解決する必要があります。
クエリは問題の小さなサブセットを実行できますが、それらの問題を実行するのに非常に優れていますが、プログラミング言語ははるかに幅広い問題を解決できます。ただし、多くの場合、プログラミング言語は、データベースが同じ問題を解決するほど効率的ではありません。そのため、この 2 つを何度も組み合わせることで、複雑な問題を非常に効率的に解決できるのです。