2011-12-05 9 views
1

私が持っているのは、異なるフィールドを持つテーブルで、カテゴリ1、カテゴリ2と呼ばれるフィールドです。そこにいくつかのデータが格納されているとしましょう。「グローバル」GROUP BYフィールドを「フィールド1」、「フィールド2」として格納される最良の方法

(cat1, cat2), (cat2, cat1), (cat3, cat1), (cat3, cat4), (cat1, cat2), (cat2, cat3) 

行には重複するカテゴリはありません。つまり、(cat1、cat1)は不可能です。私は現在、何この

(cat1, 4), (cat2, 4), (cat3, 3), (cat4, 1) 

のような出力を取得する簡単な方法はあり

(SELECT category1 AS category UNION ALL SELECT category2 AS category) AS tmp 

され、その後、私はそれによって、このTMPテーブルとグループを扱います。問題は、私がそれを最適化する方法を見つけることができないということです。ですから、問題は、上記の選択を行うためのより良い方法について、私がインデックスを使用できるようになると思いますか?そうでない場合は、これを行う唯一の方法です - 実際にこのtmpテーブルを作成してインデックスを作成するには?

+0

があなたのスキーマを囲み、私はカテゴリ – ajreal

答えて

2
SELECT fieldname, SUM(cnt) 
FROM (
    SELECT category1 AS fieldname, COUNT(category1) AS cnt 
    FROM yourtable 
    GROUP BY category1 

    UNION ALL 

    SELECT category2 AS fieldname, COUNT(category2) AS cnt 
    FROM yorutable 
    GROUP By category2 
) AS child 
GROUP BY fieldname 
+1

してください。ありがとう。 –

+0

がええああ、私はいつもそれを忘れてカウントがオフになり、両方の列に同じ数を持っていた場合は、ALLそうUNIONが必要だと思う –

+0

ありがとう、それはクールなクエリです! – Eugene

0
select distinct category1, category2 
from myTable 
group by category1, catgeory2 
関連する問題