我在SQLite数据库中有两个表,作者和线程:
CREATE TABLE IF NOT EXISTS authors(
author_id INTEGER PRIMARY KEY,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS threads(
thread_id INTEGER PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
author_id INTEGER REFERENCES authors
);
threads
中的每一行都引用authors
表。作者可以被多个线程引用。我需要获取每个作者的名称和引用它们的线程数,按计数排序。假设有四位作者; Judy,John,Jim,Jane和30个主题,查询将返回如下内容:
author.name Count
Jane 10
Judy 8
John 8
Jim 4
将返回此数据的查询是什么?
答案 0 :(得分:1)
SELECT a.name, COUNT(t.thread_id) as [Count]
FROM authors a
INNER JOIN threads t
ON a.author_id = t.author_id
GROUP BY a.author_id, a.name
ORDER BY COUNT(t.thread_id) DESC
答案 1 :(得分:1)
您可以使用加入:
SELECT name,
(SELECT COUNT(*)
FROM threads
WHERE author_id = authors.author_id
) AS count
FROM authors
替代方案是correlated subquery:
{{1}}
(如果您需要为每一行计算多个独立的聚合值,这将非常有用)。