2016-08-30 67 views
3

我有兩個SQL查詢,兩者是分開的工作,但是當我試圖統一下襬,我唯一的問題如何統一兩個SQL查詢

查詢1:

SELECT Day(funct_consumatori.timestamp) AS numar_zi, ROUND(SUM(funct_consumatori.timp_functionare) /3600) AS ore_functionare, ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) AS consum, ROUND(ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) * pret_energie.pret, 2) AS estimare 
FROM funct_consumatori 
INNER JOIN consumatori ON consumatori.id = funct_consumatori.consumator 
INNER JOIN pret_energie ON pret_energie.id =1 
WHERE Year(funct_consumatori.timestamp) = Year(
CURRENT_TIMESTAMP) 
AND Month(funct_consumatori.timestamp) = Month(
CURRENT_TIMESTAMP) 
GROUP BY numar_zi DESC 

查詢2 :

SELECT Day(ambienta.timestamp) AS numar_zi, TRUNCATE(AVG(temperatura) , 1) AS temp_med, MIN(temperatura) AS temp_min, MAX(temperatura) AS temp_max, TRUNCATE(AVG(umiditate) , 1) AS umid_medie 
FROM ambienta 
INNER JOIN consumatori AS c2 ON c2.id = '1' 
INNER JOIN pret_energie AS pe ON pe.id = '1' 
WHERE Year(ambienta.timestamp) = Year(
CURRENT_TIMESTAMP) 
AND Month(ambienta.timestamp) = Month(
CURRENT_TIMESTAMP) 
GROUP BY numar_zi DESC 

我該如何根據numar_zi(INNER one)將它們統一起來?

+0

的可能重複:http://stackoverflow.com/questions/10538539/join-two-select-statement-results – Galz

回答

2

我不知道你的表和數據,但下面的SQL可能工作

select q1.numar_zi 
     ,q1.ore_functionare 
     ,q1.consum 
     ,q1.estimare 
     -- value of q2 start 
     ,q2.numar_zi 
     ,q2.temp_med 
     ,q2.temp_min 
     ,q2.temp_max 
     ,q2.umid_medie 
from 
    (
    SELECT Day(funct_consumatori.timestamp) AS numar_zi 
    , ROUND(SUM(funct_consumatori.timp_functionare) /3600) AS ore_functionare 
    , ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) AS consum 
    , ROUND(ROUND(ROUND(SUM(funct_consumatori.timp_functionare) /3600) * consumatori.kwh, 3) * pret_energie.pret, 2) AS estimare 
    FROM funct_consumatori 
    INNER JOIN consumatori ON consumatori.id = funct_consumatori.consumator 
    INNER JOIN pret_energie ON pret_energie.id =1 
    WHERE Year(funct_consumatori.timestamp) = Year(
    CURRENT_TIMESTAMP) 
    AND Month(funct_consumatori.timestamp) = Month(
    CURRENT_TIMESTAMP) 
    GROUP BY numar_zi DESC 
    ) q1 

INNER JOIN 

    (
    SELECT Day(ambienta.timestamp) AS numar_zi 
    , TRUNCATE(AVG(temperatura) , 1) AS temp_med 
    , MIN(temperatura) AS temp_min 
    , MAX(temperatura) AS temp_max 
    , TRUNCATE(AVG(umiditate) , 1) AS umid_medie 
    FROM ambienta 
    INNER JOIN consumatori AS c2 ON c2.id = '1' 
    INNER JOIN pret_energie AS pe ON pe.id = '1' 
    WHERE Year(ambienta.timestamp) = Year(
    CURRENT_TIMESTAMP) 
    AND Month(ambienta.timestamp) = Month(
    CURRENT_TIMESTAMP) 
    GROUP BY numar_zi DESC 
    ) q2 
on 
    q1.numar_zi = q2.numar_zi 

根據你的關係數據庫管理系統(如有必要),請進行更改,但要記住,如果你想加入兩個查詢使用以下查詢

select t1.Id, t1.Col1, t1.Col2, t2.Id, t2.Col1, t2.Col2 
from 
    (SELECT Id, COUNT(*) AS Col1, Col2 FROM Table2 GROUP BY Id) t1 
INNER JOIN -- or, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN .... 
    (SELECT Id, COUNT(*) AS Col1, Col2 FROM Table2 GROUP BY Id) t2 
on 
    t1.Id= t2.Id 
+0

代碼工作很好,但問題是,我只有2行,其實來自表'ambienta'的'INNER'查詢有2個結果,'funct_consumatori'查詢有31個(la那麼我該怎麼做才能從表格中獲取所有數據以及每天的完整數據,並且如果在其他表格中存在同一天的數據,那麼可以將其分配給當前表格? –

+1

沒關係,我不得不使用'RIGHT JOIN'和一些小的修改,非常感謝Raihan,你有我的讚賞! –