我正在研究数据库,以跟踪个人项目所需的软件包。我也将此视为自学数据库设计和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文档而没有运气。
如何获得与上述预期相似的表格?
答案 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;