Mysql

計算不同表中多列中一列的出現次數

  • November 6, 2018

我有兩張桌子,我們稱它們為 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 中練習不同的操作,但我無法弄清楚這一點。

  • 不要混合DISTINCTGROUP 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如果您需要對結果進行重複數據刪除,請使用。

現在,阿卜杜勒,利用這些知識再試一次。

你必須加入兩個表。對於mysqlv8+,您可以使用 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

引用自:https://dba.stackexchange.com/questions/221932