2014-11-08 440 views
0

我有一個SQL表中有N列。稱它們爲「Col1」,「Col2」,...,「ColN」。我可以找出有多少獨特的元素也有在Col1中通過查詢:使用SQL查找所有可能的列變量組合

select count(distinct Col1) from mytable

,我能做到這一點,獨立對每列。假設我在Col1中有M_1個獨特元素,在Col2中有M_2等,我可以使用什麼單個命令來查找我的數據集的所有可能組合的總數?也就是說,單個查詢會爲我計算出什麼(M_1 * M_2 * ... * M_N)?

PS:這裏對SQL很新,所以我不確定這是否重要 - 但我在Windows上使用MySQL Workbench。

回答

1
SELECT COUNT(*) 
FROM (SELECT DISTINCT col1 FROM YourTable) AS t1 
CROSS JOIN (SELECT DISTINCT col2 FROM YourTable) AS t2 
CROSS JOIN (SELECT DISTINCT col3 FROM YourTable) AS t3 
... 

CROSS JOIN計算給定表之間的叉積。

另一種方式來寫這將是:

SELECT COUNT(DISTINCT t1.col1, t2.col2, t3.col3, ...) 
FROM YourTable AS t1 
CROSS JOIN YourTable AS t2 
CROSS JOIN YourTable AS t3 
... 

不過,也許最簡單的是:

SELECT COUNT(DISTINCT col1)*COUNT(DISTINCT col2)*COUNT(DISTINCT col3)*... 
FROM YourTable 

這不需要計算任何交叉的產品,所以它應該是最有效的。如果你在列上有索引,它甚至不需要讀取表數據,它可以使用索引完成。

+0

+1。 。 。因爲我特別喜歡第三種方法。但是,這些不一定等同。我可以讓你弄清楚爲什麼,但原因是'NULL'值。第一個將這些視爲一個獨特的價值,第二個和第三個則沒有。 – 2014-11-08 20:49:18