Mysql
計算不同表中多列中一列的出現次數
我有兩張桌子,我們稱它們為 Table1 和 Table2。表 1 有一列 c1。Table2 有兩列,分別稱為 c2 和 c3。
我想在 Table2 的兩列中計算 Table1 中 c1 的出現次數。
SELECT DISTINCT Table1.c1, count(*) FROM Table1 WHERE Table1.c1 IN(SELECT c2 OR c3 FROM Table2) GROUP BY NAME;
這顯然對我不起作用,我正在嘗試在 SQL 中練習不同的操作,但我無法弄清楚這一點。
- 不要混合
DISTINCT
和GROUP BY
。由於您使用的是“聚合函式”(COUNT(*)
),因此請使用GROUP BY
.- ( )中的列表應與
GROUP BY
( )NAME
中的非聚合列匹配SELECT``Table1.c1
OR
是一個布爾運算符,例如測試兩件事中的任何一個是否為真。它不能用於收集東西。UNION
(見下文)可以從兩個表(或同一個表中的 2 個不同列,在你的情況下)收集東西。- 盡量避免
IN ( SELECT ... )
;了解一下JOIN
。工會:
( SELECT c2 FROM Table2 UNION ALL SELECT c3 FROM Table2 )
有效地建構一個帶有一列的臨時表,稱為
c2
(在第一個名稱之後SELECT
)。
UNION DISTINCT
如果您需要對結果進行重複數據刪除,請使用。現在,阿卜杜勒,利用這些知識再試一次。
你必須加入兩個表。對於
mysql
v8+,您可以使用 CTE 語法:WITH t1 AS ( SELECT DISTINCT c1 FROM table1 ) SELECT t1.c1 , count(1) AS counter FROM t1 JOIN table2 AS t2 ON t2.c2 = t1.c1 OR t2.c3 = t1.c1 GROUP BY t1.c1