2015-04-27 67 views
-1

我有一個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 

什麼是將返回此數據的查詢?

回答

1

你可以使用一個連接:

SELECT authors.name, 
     COUNT(*) AS count 
FROM authors 
LEFT JOIN threads USING (author_id) 
GROUP BY author_id 

的替代將是一個correlated subquery

SELECT name, 
     (SELECT COUNT(*) 
     FROM threads 
     WHERE author_id = authors.author_id 
     ) AS count 
FROM authors 

(如果你需要計算爲多個獨立的聚合值這將是有益的每一行)。

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 
+0

爲什麼內部連接? –

+0

是的,當然,如果你想查看關於沒有線程的作者的信息,你應該使用LEFT JOIN。 – akekir

相關問題