簡體   English   中英

SQL 查詢:統計兩個表中出現的“id”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM