[英]SQL - Count Entries from multiple tables
我有以下表格:
Table A:
+--------+
| name |
+--------+
| name1 |
| name2 |
| name3 |
+--------+
Table B:
+--------+----------+
| name | someB |
+--------+----------+
| name1 | dorem |
| name1 | lorem |
| name3 | ipsum |
+--------+----------+
Table C:
+--------+----------+
| name | someC |
+--------+----------+
| name1 | dorem |
| name2 | lorem |
| name2 | ipsum |
+--------+----------+
SQL如何計算每個名稱的底部兩個表中的條目?
結果應如下所示:
+--------+----+----+
| name | A | B |
+--------+----+----+
| name1 | 2 | 1 |
| name2 | 0 | 2 |
| name3 | 1 | 0 |
+--------+----+----+
首先,您的數據結構有問題。 如果第一個表的名稱具有唯一的ID,則應在后續表中使用。
但在任何情況下,你name
,你想要做的次數都表所示。 您可以使用union all
和group by
:
select name, sum(a) as a, sum(b) as b
from ((select name, 1 as a, 0 as b from t2) union all
(select name, 0, 1 from t3)
) t
group by name;
您可以在SELECT子句中使用相關的子查詢:
select name,
(select count(*) from table2 t2 where t2.name = t1.name) as A,
(select count(*) from table3 t3 where t3.name = t1.name) as B
from table1 t1
嘗試這個:
SELECT C.name, COUNT(A.name), COUNT(B.Name)
FROM C
LEFT JOIN A ON C.name = A.name
LEFT JOIN B ON C.name = B.name
GROUP BY C.name
select A.Name, B2.Nb as A, C2.Nb as B
from A
inner join lateral
(
select count(*) Nb from B where B.Name=A.Name
) B2 on 1=1
inner join lateral
(
select count(*) Nb from C where C.Name=A.Name
) C2 on 1=1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.