結合のため、合計は予想よりも大きくなります。 1つのtrack_nutritionレコードと2つのtrack_fatigueレコードで特定の日付が発生すると、結合により、最初のテーブルのデータが最初のtrack_fatiguerecordと結合され、次に2番目のレコードと結合されます。したがって、同じnf_sugarsvalueが合計で2回カウントされます。この動作は平均にも影響します。
したがって、最初に集計を実行してから、結合を実行する必要があります。
次に、すべてのデータを確実に取得するには、特定の日付ですべてのテーブルに値がない場合でも、完全外部結合を使用する必要があります。これにより、各テーブルの各レコードが結果に反映されることが保証されます。現在、MySQLはそのような完全外部結合をサポートしていないため、追加の副選択を使用して4つのテーブルからすべての異なる日付を選択し、他の集約データと「左結合」します。
SELECT date.date、IFNULL(average_ticnum_n、0)as average_ticnum IFNULL(average_fatiguenum_n、0)as average_fatiguenum IFNULL(average_stressnum_n、0)as average_stressnum IFNULL(sum_nf_sugars_n、0)as sum_nf_sugars IFNULL、 sum_nf_total_carbohydrate FROM(SELECT DISTINCT user_id、date FROM(SELECT user_id、date FROM track_ticseverity UNION SELECT user_id、date FROM track_fatigue UNION SELECT user_id、date FROM track _stress UNION SELECT user_id、date FROM track_nutrition)as Combined)as dateLEFT JOIN(SELECT user_id、date、AVG(ticnum)as average_ticnum_n FROM track_ticseverity GROUP BY user_id、date)as grp_ticseverity ON date.date =grp_ticseverity.date AND date.user_id =grp_ticseverity.user_idLEFT JOIN(SELECT user_id、date、AVG(fatiguenum)as average_fatiguenum_n FROM track_fatigue GROUP BY user_id、date)as grp_fatigue ON date.date =grp_fatigue.date AND date.user_id =grp_fatigue.user_idLEFT JOIN SELECT user_id、date、AVG(stressnum)as average_stressnum_n FROM track_stress GROUP BY user_id、date)as grp_stress ON date.date =grp_stress.date AND date.user_id =grp_stress.user_idLEFT JOIN(SELECT user_id、date、SUM(nf_sugars)as sum_n_ 、SUM(nf_total_carbohydrate)as sum_nf_total_carbohydrate_n FROM track_nutrition GROUP BY user_id、date)as grp_nutrition ONdates.date =grp_nutrition.date ANDdates.user_id =grp_nutrition.user_idWHEREdates.user_id =1ORDER BYdates.date;
その特定の日付のデータがない場合、一部の列で0の値が取得されることに注意してください。
NULL
を取得したい場合 代わりに、上記のクエリの列からNvl()を削除してください。次に、すべてのデータを0〜10のスケールで正規化するには、値のタイプごとに見つかった最大値を調べてそれを変換に使用できます。または、タイプごとの範囲が事前にわかっている場合は、それを使用することをお勧めします。情報、そして多分それをSQLでコード化する。
ただし、実際に異なるスケールを使用するグラフで値を組み合わせるのは、常に少し奇妙に見えます。このようなグラフでは、間違った結論に簡単に飛びつく可能性があります。