2017-11-27 4 views
0

はこの3 1の問合せで手に入れた照会:出力は

SELECT * FROM 
(
SELECT mesures.date j, AVG(mesures.valeur) maxi 
FROM mesures 
JOIN plages_horaire ON mesures.id_plage = plages_horaire.id_plage 
WHERE MONTH(mesures.date) = '9' AND YEAR(mesures.date) = '2016' AND mesures.code_station = 'P02SE' AND mesures.id_crit = '1' AND mesures.id_type = '1' 
GROUP BY mesures.date 
) maxi 
, 
(
SELECT AVG(mesures.valeur) mini 
FROM mesures 
JOIN plages_horaire ON mesures.id_plage = plages_horaire.id_plage 
WHERE MONTH(mesures.date) = '9' AND YEAR(mesures.date) = '2016' AND mesures.code_station = 'P02SE' AND mesures.id_crit = '1' AND mesures.id_type = '2' 
GROUP BY mesures.date 
) mini 
, 
(
SELECT AVG(mesures.valeur) moy 
FROM mesures 
JOIN plages_horaire ON mesures.id_plage = plages_horaire.id_plage 
WHERE MONTH(mesures.date) = '9' AND YEAR(mesures.date) = '2016' AND mesures.code_station = 'P02SE' AND mesures.id_crit = '1' AND mesures.id_type = '3' 
GROUP BY mesures.date 
) moy 
GROUP BY j 

を問題は、私は2つの最後の列の値を除い望む結果を得ることであるすべての行で同じです: query output

IそれがGROUP BYのためだと考えてください。

+0

これらのテーブルの構造といくつかのサンプルデータを確認する必要があります – kchason

+2

コードは意味がありません。あなたは大規模なデカルト積をして、集計しています。 –

+0

DB:http://puu.sh/yuDfd/2f68a940d1.jpg – SimonCo

答えて

2

クエリからわかるとおり、plage_horaireテーブルは必要ありません。また、条件付き集計を使用してロジックを大幅に簡素化することもできます。

SELECT m.date, 
     AVG(CASE WHEN m.id_type = 1 THEN m.valeur END) maxi, 
     AVG(CASE WHEN m.id_type = 2 THEN m.valeur END) mini, 
     AVG(CASE WHEN m.id_type = 3 THEN m.valeur END) maxmoy, 
FROM mesures m 
WHERE MONTH(m.date) = 9 AND YEAR(m.date) = 2016 AND 
     m.code_station = 'P02SE' AND m.id_crit = 1 AND m.id_type IN (1, 2, 3)  
GROUP BY m.date ; 

数値定数から引用符も削除しました。 MONTH()およびYEAR()が返されるため、引用符は適切ではありません。私はidsも数字であると推測しています。

+0

私は 'AND m.id_type = 1'は' AND m.id_type IN(1,2,3) 'であるべきだと思います。 (私は日付範囲の条件を 'm.date> = '2016-09-01' AND m.date <'2016-10-01'と書いています。 – spencer7593

+0

' plage_horaire'とのリンクが必要ですそれはすべてのデータを含んでいます。 データベースをあなたと共有したいのですが、スクリーンショットとは別に... – SimonCo

+0

@ spencer7593 ...。ありがとうございました。私は数定数についての指摘をしていたので、 。 –