2012-08-14 53 views
1

我使用union all組合了兩個表格。但是,生成的數據有重複。有沒有辦法加入重複?如何在SQL中加入'union all'的結果

例如,結果表後UNION ALLt,看起來像這樣「:

__DAY__.....................__COUNT__ 
monday....................1 
tuesday...................2 
tuesday...................3 
wednesday..............4 
wednesday..............1 
wednesday..............5 

我想它看起來就像這樣:

__DAY__.................__COUNT__ 
monday....................1 
tuesday....................5 
wednesday..............10 

而且,我試過「group by t.day,t.count」並且它不起作用 而「....」僅用於格式化目的,以便具有某種縮進類型

查詢如下。

SELECT t1.hour, t1.day, t1.count 
FROM 
(
    (SELECT hour(time(FROM_UNIXTIME(timecode))) AS hour, 
    date(FROM_UNIXTIME(timecode)) AS day, 
    (FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
    FROM sampleData 
    WHERE hour(time(FROM_UNIXTIME(timecode)))>=14 
    GROUP BY DAY) 
union all 
    (SELECT hour(time(FROM_UNIXTIME(timecode))) as hour, 
    date(FROM_UNIXTIME(timecode-86400)) AS day, 
    (FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
    FROM sampleData 
    WHERE hour(time(FROM_UNIXTIME(timecode)))< 14 
    GROUP BY DAY) 
) t1 
GROUP BY t1.day, t1.count 
HAVING COUNT(*)>0 
ORDER BY t1.day 

回答

5

試試這個簡單的查詢:

SELECT day,sum(count) FROM Table1 
Group by day 

See this SQLFiddle

編輯:您所查詢的嘗試這個辦法:

SELECT t1.hour, t1.day, sum(t1.count) 
FROM 
(
    (SELECT hour(time(FROM_UNIXTIME(timecode))) AS hour, 
    date(FROM_UNIXTIME(timecode)) AS day, 
    (FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
    FROM sampleData 
    WHERE hour(time(FROM_UNIXTIME(timecode)))>=14 
    GROUP BY DAY) 
union all 
    (SELECT hour(time(FROM_UNIXTIME(timecode))) as hour, 
    date(FROM_UNIXTIME(timecode-86400)) AS day, 
    (FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
    FROM sampleData 
    WHERE hour(time(FROM_UNIXTIME(timecode)))< 14 
    GROUP BY DAY) 
) t1 
GROUP BY t1.day 
HAVING COUNT(*)>0 
ORDER BY t1.day 
+0

非常感謝你 – user1569897 2012-08-14 06:17:50

0

您可以通過嘗試組:

select DAY,sum(COUNT) as COUNT 
from 
(select DAY,COUNT from table1 
    union all 
select DAY,COUNT from table1)a 
group by a.DAY 

編輯

您的查詢,

SELECT t1.day, sum(t1.count) 

..... 
..... 
GROUP BY t1.day 
HAVING COUNT(*)>0 
ORDER BY t1.day 
0

SUM一天計,只有組。

SELECT t1.hour, t1.day, sum(t1.count) 
    FROM 
    (
     (SELECT hour(time(FROM_UNIXTIME(timecode))) AS hour, 
     date(FROM_UNIXTIME(timecode)) AS day, 
     (FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     WHERE hour(time(FROM_UNIXTIME(timecode)))>=14 
     GROUP BY DAY) 
    union all 
     (SELECT hour(time(FROM_UNIXTIME(timecode))) as hour, 
     date(FROM_UNIXTIME(timecode-86400)) AS day, 
     (FROM_UNIXTIME(timecode)) AS original, COUNT(1) as 'count' 
     FROM sampleData 
     WHERE hour(time(FROM_UNIXTIME(timecode)))< 14 
     GROUP BY DAY) 
    ) t1 
    GROUP BY t1.day 
    HAVING COUNT(*)>0 
    ORDER BY t1.day