[英]SQL Query: Count “id” occurrences in two tables
我有這 3 張桌子,我正在嘗試計算特定城鎮 ID 有多少“提示”和“測驗”。
db_town
ID | 鎮 |
---|---|
1 | 紐約 |
db_hint
ID | town_id | 暗示 |
---|---|---|
1 | 1 | 測試 |
db_quiz
ID | town_id | 測驗 |
---|---|---|
1 | 1 | 測驗 1 |
2 | 1 | 測驗 2 |
我正在使用這個語句,但它不起作用:(
SELECT count(q.id),count(h.id) FROM `db_town` t LEFT JOIN `db_quiz` q ON t.id = q.town_id LEFT JOIN `db_hint` h ON t.id = h.town_id WHERE t.id = 1 GROUP BY t.id
它產生了這個結果:
計數(q.id) | 計數(h.id) |
---|---|
2 | 2 |
我需要使用兩個語句嗎? 或者是否可以在單個 SQL 語句中查詢它? 我正在使用 MariaDB。
您可以使用union all
和聚合:
select town_id, sum(is_hint), sum(is_quiz)
from ((select town_id, 1 as is_hint, 0 as is_quiz
from hints
) union all
(select town_id, 0, 1
from quizzes
)
) t
group by town_id;
或者,您可以使用相關子查詢:
select t.*,
(select count(*) from hints h where h.town_id = t.id),
(select count(*) from quizzes q where q.town_id = t.id)
from towns t;
需要注意的兩件事:
JOIN
可能會增加行數並忽略計數。0
值。 如果提示 id 和測驗 id 都是唯一的,則可以使用COUNT (DISTINCT)
。
SELECT
count(distinct q.id),count(distinct h.id)
FROM `db_town` t
LEFT JOIN `db_quiz` q ON t.id = q.town_id
LEFT JOIN `db_hint` h ON t.id = h.town_id
WHERE t.id = 1 GROUP BY t.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.