2012-02-24 8 views
6

私はいくつかの選択を行っており、オーバーラップを計算したいと考えています。例:SQLはユニオン内のアイテムの多重度を選択します

SELECT id FROM foo WHERE ... 
SELECT id FROM bar WHERE ... 
SELECT id FROM baz WHERE ... 

これらのクエリをそれぞれa、b、およびcと呼びます。 aが(1,2,3,4,5)を与え、bが(1,3,5)を与え、cが(4,5,6)を与えると仮定しよう。私はこれらの和集合をとり、多様性を数えたいと思う。上記の例では、私が探している結果は

id | multiplicity 
----------------- 
1 | 2 
2 | 1 
3 | 2 
4 | 2 
5 | 3 
6 | 1 

です。これはどのように1つのクエリでMySQL5で行いますか? (a、b、およびcの部分は、プレーン・セレクトまたはストアド・プロシージャとすることができます)。

+0

あなたが固定されているかだが働くと考えていますテーブルの量、エントリ、またはそれらは異なる可能性がありますか?不足しているIDのそれぞれを0に置き換えて、第1、第2、第3の要素などを合計することができます... – Andrew

+0

私は多重度が好きです... – Ben

答えて

7

私は、現時点ではこれを確認することはできませんが、私は、これは

SELECT id, count(id) AS multiplicity 
FROM 
(
    SELECT id FROM foo WHERE ... 
    UNION ALL 
    SELECT id FROM bar WHERE ... 
    UNION ALL 
    SELECT id FROM baz WHERE ... 
) AS TablesTogether 
GROUP BY id 
+0

ありがとう。これに重みを付けることができるかどうかは分かりますか? 'baz'の重みが3であれば、私の例は' id = 5、multiplicity = 5; id = 6、multiplicity = 3'で終わるでしょうか?このような – spraff

+0

何か: SELECT ID、 ( SELECT ID FROM多重 AS合計(FULLCOUNT)、(、重量 UNION ALL SELECT ID、(idで#fooグループからFULLCOUNTとして(ID)*重量)カウントUNION ALL GROUP BY ID(GROUP BY ID)、GROUP BY ID(重量で )からのFROM #bazグループのフルカウントとしてのSELECT ID、(count(id)* weight) –

0

ここで加重ソリューションのフォーマットされたバージョン(weight_Fooweight_Barは定数)

SELECT id, sum(fullcount) AS multiplicity 
FROM (
    SELECT id, weight_Foo as fullcount FROM Foo WHERE ... 
    UNION ALL 
    SELECT id, weight_Bar as fullcount FROM Bar WHERE ... 
) AS TemporaryTableName 
GROUP BY id 
関連する問題