对于表中的每一行,计算该行由另一个表引用的次数

时间:2015-04-27 08:06:36

标签: sql sqlite

我在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

将返回此数据的查询是什么?

2 个答案:

答案 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}}

(如果您需要为每一行计算多个独立的聚合值,这将非常有用)。