2012-04-10 8 views
0

:ここ異なるテーブルのSUM値を結合する方法は?私はこのような多くのテーブルと、テーブル構造を以下している(パフォーマンス良い?)

data_1: 
+-------+--------+-------+ 
| views | clicks | date | 
+-------+--------+-------+ 
| 29 |  1 | ..... | 
| 458 |  9 | ..... | 
+-------+--------+-------+ 
.... 

data_43: 
+-------+--------+-------+ 
| views | clicks | date | 
+-------+--------+-------+ 
|  0 |  0 | ..... | 
|  0 |  0 | ..... | 
+-------+--------+-------+ 
... 

私の質問は、私は1つのクエリですべての合計値を取得する方法、ありますか?

単純結合して、私はそれを試してみました:

mysql> SELECT SUM(t1.views) data_1_views, 
       SUM(t1.clicks) data_1_clicks, 
       SUM(t2.views) data_43_views, 
       SUM(t2.clicks) data_43_clicks 
     FROM data_1 t1, data_43 t2; 

しかし、私の結果は、私が期待したものではありません。

+--------------+---------------+---------------+----------------+ 
| data_1_views | data_1_clicks | data_43_views | data_43_clicks | 
+--------------+---------------+---------------+----------------+ 
|   NULL |   NULL |   NULL |   NULL | 
+--------------+---------------+---------------+----------------+ 

私はそれがあることが予想:

+--------------+---------------+---------------+----------------+ 
| data_1_views | data_1_clicks | data_43_views | data_43_clicks | 
+--------------+---------------+---------------+----------------+ 
|   487 |   10 |    0 |    0 | 
+--------------+---------------+---------------+----------------+ 

誰でもここで誰がこのクエリで私を助けることができますか?
これは、複数のクエリで

+0

になるだろう、あまりにも –

+0

ええ、私は –

+0

はそれがdata_1_views AS SUM(t1.views)すべきではない、またはASは、これらの日をスキップすることができ、それを編集し、それを共有します? – BenOfTheNorth

答えて

1

複数のクエリを使用すると、多くの行をグループ化している場合は特に細かいです。これらの2つのテーブルを1つのクエリで一括して処理する利点はありません(実際には潜在的なバグ)。 私はちょうどあなたが何の結果を期待している2つのクエリ

SELECT SUM(t1.views) data_1_views, SUM(t1.clicks) data_1_clicks 
FROM data_1 t1 

SELECT SUM(t2.views) data_43_views, SUM(t2.clicks) data_43_clicks 
FROM data_43 t2; 
+0

ええ、[KingFisherの返信](http://stackoverflow.com/a/10088540/612202)私は "空の"値で私の列のすべてを埋めることになるだろう過度を見た。ありがとう。 –

1

使用Unionクエリをすべてこのようなものをやってよりもパフォーマンスであれば、私も興味があります。

以下のように:この場合

SELECT sum(t.data_1_views) as data_1_views,SUM(t.data_1_clicks) as data_1_clicks, 
SUM(t.data_43_views) as data_43_views,SUM(t.data_43_views) as data_43_views 
    FROM (
     SELECT SUM(t1.views) data_1_views,SUM(t1.clicks) data_1_clicks, 
     0 as data_43_views,0 as data_43_clicks 
     FROM FROM data_1 as t1 

     UNION 

     SELECT 0 as data_1_views,0 as data_1_clicks,SUM(t1.clicks) as data_43_views, SUM(t2.clicks) 
     FROM data_43_clicks as t2 
     ) as t GROUP BY 1 
+0

私はあなたがここで何をしているのか理解していますが、それは百以上のテーブルがあるので、過剰な残虐行為のようです。したがって、ゼロの値を持つすべてのサブ選択を満たす必要があります。しかしUNIONを教えてくれてありがとう。 –

関連する問題