2016-09-21 8 views
0

私は個人的なプロジェクトに必要なパッケージを追跡するためにデータベースに取り組んでいます。私はこれを自分自身でデータベース設計とSQLを教えるための練習として扱っています。SQLiteでcount()行を複数選択するにはどうすればよいですか?

CREATE TABLE packages 
(
    ID INTEGER PRIMARY KEY, 
    Name TEXT UNIQUE ON CONFLICT REPLACE NOT NULL ON CONFLICT IGNORE 
); 
CREATE TABLE dependencies 
(
    dependentPackage INTEGER REFERENCES pages(ID), 
    requiredPackage INTEGER REFERENCES pages(ID) 
); 

dependencies.dependentPackageで参照されるパッケージには、私はテーブルを返し列NumPackagesRequired、との問い合わせをしたいdependencies.requiredPackage で参照されるパッケージに依存します:私は使用していたデータベースは、次のようなスキーマを持ちます私は試みることによってこれを達成することはできません

packageName | NumDependencies 
package1 | 6 
package5 | 8 
package9 | 1 

:それは次のようなものになります

SELECT p.name AS packageName, count (d.requiredPackage) AS numDependencies 
FROM packages p 
JOIN dependencies d ON d.dependentPackage=p.ID; 

をbecau最初のパッケージの名前とすべての要件の数を含む1行だけを返します。 count()関数のパラメータとしてSELECT文をネストしようとしましたが、結果が1行しか得られませんでした。私は運の度のないsqliteのドキュメントを検索しました。

上記のようなテーブルを取得するにはどうすればよいですか?あなたはGROUP BYを使用している

+1

私はあなたが 'GROUPを探していると思う:

SELECT p.name AS packageName, count (d.requiredPackage) AS numDependencies FROM packages p JOIN dependencies d ON d.dependentPackage=p.ID GROUP BY p.name; 

また、相関サブクエリにcoutingを移動しますBY' –

答えて

1

は、集約関数は、各グループに対して計算されています

SELECT name AS packageName, 
     (SELECT count(*) 
     FROM dependencies 
     WHERE dependentPackage = packages.ID 
     ) AS numDependencies 
FROM packages; 
関連する問題