2016-07-06 6 views
0

私は彼の活動の最後の7日以内にユーザーのavgを見つけるしようとしているが、代わりに私のクエリは、これが結果です私のクエリで平均の複数の結果が表示されるのはなぜですか?

SELECT temp_user_batches.user_id    AS 
           user_id, 
           temp_user_batches.activity_goal   AS goal, 
           user_activities.activity_date   AS dates 
           , 
           Date_sub(Curdate( 
           ), INTERVAL 7 day)  AS 
           min_activity_date, 
           Curdate()        AS 
           max_activity_date, 
           (Sum(user_activities.time_spent)/60) AS 
           total_time_spent 
         FROM temp_user_batches 
           INNER JOIN user_activities 
             ON temp_user_batches.user_id = 
              user_activities.user_id 
         WHERE activity_date BETWEEN Date_sub(Now(), 
                INTERVAL 7 day) 
                AND 
                Curdate() 
         GROUP BY user_id, 
            goal, 
            dates, 
            max_activity_date, 
            min_activity_date; 

をすべてのユーザーの複数の出現箇所を示しているユーザーのための1つの平均結果を示しています。

9122 10 2016-07-02 2016-06-30 2016-07-07 0.0000 
9122 10 2016-07-05 2016-06-30 2016-07-07 0.0000 
9122 10 2016-07-06 2016-06-30 2016-07-07 0.0000 
9127 3 2016-07-01 2016-06-30 2016-07-07 0.4500 
9127 3 2016-07-03 2016-06-30 2016-07-07 0.0000 
9131 3 2016-07-01 2016-06-30 2016-07-07 135.3000 
9131 3 2016-07-03 2016-06-30 2016-07-07 340.4500 
9131 3 2016-07-04 2016-06-30 2016-07-07 0.0000 
9134 3 2016-07-03 2016-06-30 2016-07-07 0.0000 
9135 3 2016-07-03 2016-06-30 2016-07-07 9.1667 
9136 3 2016-07-03 2016-06-30 2016-07-07 4.4000 
9137 3 2016-07-03 2016-06-30 2016-07-07 0.0000 

私のユーザーのアクティビティテーブルには、ユーザー9122

1 9122 10 0 2016-07-02 
2 9122 10 0 2016-07-05 
3 9122 10 0 2016-07-06 

の3つのエントリので、このクエリはavgをするが、そのべきではありませんがあります。

+0

あなたは '日付、max_activity_date、' GROUP BY'でmin_activity_date'を持つことを意味しなかった、それは、その場合の期待される成果を確認するのに役立ちます。 – Bulat

+0

なぜNOW()* AND * CURDATE()??確かにそれは1つです* OR *他の – Strawberry

+0

私は何をグループ化すべきですか? GROUP BY句内の列に機能的に依存しない非集約列 'realifex_development.user_activities.activity_date'がSELECTリストの式#3にありません。これはsql_mode = only_full_group_byと互換性がありません – Prem

答えて

1

異なる値の異なる複数の行がactivity_goalになっていますが、それらを組み合わせる必要があるようです。だから、あなたが望むように見えるものをするクエリを簡素化:

SELECT b.user_id as user_id, 
     Date_sub(Curdate(), INTERVAL 7 day) as min_activity_date, 
     Curdate() as max_activity_date, 
     (Sum(user_activities.time_spent)/60) as total_time_spent 
FROM temp_user_batches b INNER JOIN 
    user_activities a 
    ON b.user_id = a.user_id 
WHERE a.activity_date BETWEEN Date_sub(Now(), INTERVAL 7 day) AND Curdate() 
GROUP BY user_id, max_activity_date, min_activity_date; 
+0

私はactivity_goal beacauseを使用していますね、お返事ありがとうございます私はtime_spentとの比較のための活動目標が必要です。これはselect user_id、time_spent、goal(上記のクエリ)の内側に来るサブクエリで、time_spent> goal – Prem

0

"GROUP BY節を詳しく見てください!"

間違いなく、実際に意図したよりも多くのグループフィールドをこの句に追加しました。

最後のグループを一覧から削除します。 。 。

+0

これはすでにエラーが発生しました SELECTリストの式3はGROUP BY句にはなく、GROUP BY句のカラムに機能的に依存しない非集約カラム 'realifex_development.user_activities.activity_date'が含まれています。これはsql_mode = only_full_group_byと互換性がありません – Prem

+0

* "Meh ..." *あなたが何をしても(!)、(非SQL ...) "モードに依存する何かをしないでください!" –

+0

「それはよくあるかもしれない」...(そして、私を赦してください、私は**これをもっと詳しく見ていませんでした)、そして私はまた** un **そうするでしょう...)あなたが*ネストされたクエリに頼らなければならない* ...別名 "サブ'セレクト '...この特定のケースで –

関連する問題