如何在SQLite中选择多个count()行?

时间:2016-09-21 16:35:09

标签: sqlite count

我正在研究数据库,以跟踪个人项目所需的软件包。我也将此视为自学数据库设计和SQL的练习。我正在使用的数据库具有如下模式:

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引用的包依赖于dependencies.requiredPackage引用的包。 我想要一个带有NumPackagesRequired列的查询,该列返回一个如下所示的表:

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;

因为它只返回一行,包含第一个包的名称和所有要求的计数。 我尝试将SELECT语句作为参数嵌套到count()函数中,但我仍然只得到一行结果。我已经搜索了sqlite文档而没有运气。

如何获得与上述预期相似的表格?

1 个答案:

答案 0 :(得分:1)

当您使用GROUP BY时,将对每个组计算聚合函数:

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移动到相关的子查询中:

SELECT name AS packageName,
       (SELECT count(*)
        FROM dependencies
        WHERE dependentPackage = packages.ID
       ) AS numDependencies
FROM packages;