簡體   English   中英

SQL-計算多個表中的條目

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

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