有三個表格,分別為監測站(STATION)、監測器(SENSOR)、環境暴露資料(RISKDATA)
關聯圖如下:
https://imgur.com/DNQAn7V
https://imgur.com/87Z1z2V
問題:試從既有的資料裡計算各監測站的二氧化硫平均濃度,列出各測站之監測站名稱NODE_NAME與平均濃度 AVG(ENV_CONS)
我是這樣打的,請問哪裡有錯
select node_name, avg(env_cons)"AVG_CONS"
from station s,riskdata r
where s.node_id=r.node_id
and s.node_id in
(SELECT NODE_ID FROM riskdata
GROUP BY NODE_ID)
ORDER BY "AVG_CONS" DESC;
PS:
SEN_NAME為二氧化硫分析儀
有二氧化硫分析儀的測站分別為(以SEN_NUM;NODE_ID 表示之):
而查詢的結果應包括RISKDATA中的(ENV_NUM;ENV_CONS;SEN_NUM ;NODE_ID):
而以上的答案必須ORDER BY監測站的AVG(ENV_CONS)
拜託各位幫忙~~~
小妹由衷感恩您~~~~~
Select station.node_id,station.node_name , s.sen_func, r.avg_cons from
(Select s.node_id, s.sen_func, r.avg_cons from
(Select node_id, avg(env_cons) as avg_cons from riskdata group by node_id)r , sensor s
where s.sen_func = '二氧化硫分析儀' and r.node_id = s.node_id) ss, station
where station.node_id = ss.nodeid
order by r.avg_cons desc
練習一下 不知道這樣是不是可以QQ
無法耶~而且我上面打得HAVING部分是錯的,因為沒給SEN_NUM,必ㄒㄩ,必須單靠指令查詢出答案
妳的order by 的AVG_CONS放錯位置了 妳放在子查詢裡面可是妳的AVG_CONS是在外面的select
恩恩我有發現~可是我改過後~變這樣
https://imgur.com/1dwr6Hn
用avg(env_cons) as AVG_CONS也一樣耶
改成這樣後還是不行耶
select node_name, avg(env_cons)
from
(SELECT NODE_NAME,ENV_CONS
FROM RISKDATA
LEFT JOIN SENSOR ON SENSOR.NODE_ID=RISKDATA.NODE_ID AND SENSOR.SEN_NUM=RISKDATA.SEN_NUM
LEFT JOIN STATION ON STATION.NODE_ID=SENSOR.NODE_ID
WHERE 1=1
AND SENSOR.SEN_NAME='二氧化硫分析儀')
order by node_name;
妳把avg放裡面有group by的子查詢 再外面在用order by 排序
SELECT TEMPTABLE.AVGField,TEMPTABLE.NODE_ID,TEMPTABLE.NODE_NAME,RISKDATA.SEN_NUM ,
RISKDATA.ENV_CONS,RISKDATA.ENV_NUM
FROM (
SELECT STATION.NODE_ID,STATION.NODE_NAME,
AVG(RISKDATA.ENV_CONS) OVER(PARTITION by RISKDATA.NODE_ID) as AVGField
FROM RISKDATA
LEFT JOIN SENSOR ON SENSOR.NODE_ID=RISKDATA.NODE_ID AND SENSOR.SEN_NUM=RISKDATA.SEN_NUM
LEFT JOIN STATION ON STATION.NODE_ID=SENSOR.NODE_ID
WHERE 1=1
AND SENSOR.SEN_NAME='二氧化硫分析儀'
) "TEMPTABLE"
LEFT JOIN RISKDATA ON RISKDATA.NODE_ID=TEMPTABLE.NODE_ID
WHERE 1=1
ORDER BY TEMPTABLE.AVGField DESC,TEMPTABLE.NODE_ID,RISKDATA.SEN_NUM
以上程式碼未實測