0

私は次のようなテーブル構造を持っており、次のような多くのテーブルがあります。

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 |
+--------------+---------------+---------------+----------------+

このクエリを手伝ってくれる人はいますか?
これが複数のクエリでこれらすべてのことを行うよりもパフォーマンスが高いかどうかにも興味があります

4

2 に答える 2

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
于 2012-04-10T12:10:43.397 に答える
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; 
于 2012-04-10T12:21:40.030 に答える