2012-04-10 14 views
0

ich folgende Tabellenstruktur haben, mit vielen Tabellen wie folgt aus:Wie SUM Werte verschiedener Tabellen kombinieren? (Gute Leistung?)

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

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

Meine Frage ist, wie kann ich alle Summenwerte in einer Abfrage?

Ich versuchte es mit einem einfachen verbinden:

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; 

Aber mein Ergebnis ist nicht das, was ich erwartet hatte:

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

ich es erwartet hatte:

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

Jedermann hier, wer kann mir bei dieser Abfrage helfen?
Ich bin auch interessiert, ob dies leistungsfähiger ist als all diese Sachen in mehreren Abfragen

+0

welches Ergebnis erwarten Sie, es –

+0

teilen Ja, ich bearbeiten es –

+0

Sollte es nicht SUM (t1.views) AS data_1_views sein, oder kann die AS in diesen Tagen übersprungen wird ? – BenOfTheNorth

Antwort

1

In diesem Fall mehrere Abfragen sind in Ordnung, besonders wenn Sie viele Zeilen gruppieren. Es gibt praktisch keinen Vorteil (und eigentlich potentielle Fehler), diese beiden Tabellen in einer Abfrage zusammenzufassen. würde ich nur machen zwei Abfragen

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

Ja mit [KingFishers Antwort] (http://stackoverflow.com/a/10088540/612202) Ich sah, welcher Overkill es wäre, alle meine Spalten mit 'leeren' Werten zu füllen. Vielen Dank. –

1

Verwenden Sie Union Abfrage.

wie unten:

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

Ich verstehe, was Sie hier tun, aber es scheint eine Menge Overkill zu sein, denn es gibt hundert oder mehr Tabellen davon, also musste ich alle Unterauswahlen mit Nullwerten füllen. Aber danke, dass du mir UNION gezeigt hast. –

Verwandte Themen