2011-06-30 11 views
0

私は異なったMySQL SELECTクエリを持っています。これらは、合計、固有の合計、特定のタイプの合計を生成します。MySQL:複数のwhere節を持つデータセットを作成する

そこらのインスタンス:

Loc | total | unique | missing 

London | 10 | 5 | 2 

New York |20 |10 |5 

現在、私は別にこれらの選択クエリのそれぞれを実行していますが、私はむしろ、一度にすべてを実行すると思います。 MySQLでこれを行う方法はありますか?

ような何か:あなたが欲しいものをおそらく

SELECT 
    Location 
    Count(total) 
    SELECT 
     count(unique) 
    FROM 
     .. my tables.. 
    WHERE 
     .. where clause for unique part .. 
    GROUP BY 
     unique 
FROM 
    .. my tables .. 
WHERE 
    .. where clause for total part .. 
GROUP BY 
    total 
+0

ポストあなたが結合したい2つのクエリ - 問題はそんなにから収集するために何もない抽象化されるので、あなたの擬似SQLは無用ですそれ。 –

+0

あなたの例の難しい部分は、SQLでは、SQL文で変数によって表名を表現できないということです。そのためには、ストアドプロシージャまたはスクリプトロジックの領域にいます。 – dkretz

答えて

0

ありがとうございます。これでグリップを取得しようとして誰のために、私の最終的な解決策は:

SELECT 
    Geo, 
    total, 
    SUM(unique) as unique 
FROM 
    (SELECT 
     Geo, 
     COUNT(total) AS total, 
     0 unique, 
    FROM 
     -- my tables -- 
    WHERE 
     -- where clause for totals -- 
    GROUP BY 
     Geo) 
    UNION 
    (SELECT 
     Geo, 
     0 total, 
     COUNT(unique) AS unique, 
    FROM 
     -- my tables -- 
    WHERE 
     -- where clause for unique -- 
    GROUP BY 
     Geo) 
) as tmptable 
GROUP BY 
    Geo 
2

SELECT * from table where... 
UNION 
SELECT * from table where... 

UNIONで明らか列は、各クエリから返さ同じである必要があります。

+0

ああ、問題があります。最初のクエリには他のクエリの列がありません。最初のテーブルに 'missed = 0'のようなものを入れてもいいですか? – Hadleigh

+0

はい、 'select null、x table1 union select y、z from table2'は完全に受け入れられます。すべてのクエリで行数が一致している限り、結合を行うことができます。 –

+0

同じ列名は必要ありませんが、同じ順序でフィールド(番号と型)の同じセットが必要です。必要に応じてそれらの位置にNULLまたは値を使用できます。 – dkretz

0

サブクエリ(または複数のサブクエリ)が順調であると予想します。

select location, (select count(total) 
        from totalTable 
        where totalTable.location = locationTable.location) as total, 
       (select count(uniqe) 
        from uniqeTable 
        where uniqeTable.location = locationTable.location) as uniqe, 
       (select count(missing) 
        from missingTable 
        where missingTable.location = locationTable.location) as missing 
from locationTable 
where locationCriteria = searchCriteria 

必要な場合は、複数のサブクエリで同じテーブルを参照することができます - ちょうどできれ適切にインデックスされます何かに、IDSにそれらを結合してみてください。明らかにwhere句は必要に応じて調整する必要があります。

関連する問題