2017-05-08 145 views
1

我有2個表(示例):的Max&AVG MYSQL INNER JOIN 2個表

用戶:

ID company_ID 
1  7 
2  6 
3  7 

activity_rewards:

user_ID points activity_type_ID 
1   1   7 
1   2   7 
1   1   7 
1   1   8 
2   1   7 
2   1   7 
2   2   8 
2   1   7 
3   2   7 
3   1   7 
3   2   8 
3   1   8 

(還有用於公司表和activity_types,但他們不應該在這裏相關)

我需要一個MYSQL查詢,將總和點f或者每個用戶WHERE所有用戶都具有一定的company_ID和一定activity_type_ID,它會返回MAX和所有用戶點總和的AVG

我有,例如:

SELECT SUM(activity_rewards.points) AS totalpoints, 
    MAX(activity_rewards.points) AS maxpoints, 
    AVG(activity_rewards.points) AS avgpoints 
FROM activity_rewards 
INNER JOIN users 
    ON activity_rewards.user_ID = users.ID 
WHERE ((users.company_ID = "7") && (activity_rewards.activity_type_ID LIKE '8')) 

在示例查詢只涉及3個結果。它們是:

user_ID points activity_type_ID 
1   1   8 
3   2   8 
3   1   8 

我想:

  • 用戶1有1點
  • 用戶3已經3點
  • 最多是3平均爲2

代替我得到的最大值是2,平均值是1.33

+0

你想最大和用戶ID總結那麼點的平均值。 – Shadow

回答

2

結果與您的查詢一致,但您的查詢不符合您的要求。

您的查詢計算相關記錄中的點數的最大值和平均值。但你似乎想要最大和用戶ID加起來的點的平均值。

這意味着您需要計算子查詢中每個用戶的點數之和,然後計算外部查詢中的最大值和平均值。

SELECT SUM(sumpoints) as totalpoints, max(sumpoints) as maxpoints, avg(sumpoints) as avgpoints 
FROM 
    (SELECT users.ID, SUM(activity_rewards.points) AS sumpoints 
    FROM activity_rewards 
    INNER JOIN users ON activity_rewards.user_ID = users.ID 
    WHERE users.company_ID = 7 and activity_rewards.activity_type_ID = 8 
    GROUP BY users.ID) t 
+0

謝謝你這個工作。你能告訴我最後的「t」是什麼意思嗎? – Barrowstorm

+0

它作爲別名,類似於總分,最高分和平均分(使用'as'是可選的)。每個派生表(在'from'子句中的子查詢)必須有一個別名(名稱)。 – Shadow

0

做這樣的:

SELECT MAX(sum_points) max, AVG(sum_points) avg, SUM(sum_points) sum_all FROM (SELECT SUM(t2.points) sum_points FROM users t1 JOIN activity_rewards t2 ON (t1.ID = t2.user_ID) WHERE ((t1.company_ID = "7") AND (t2.activity_type_ID = '8')) GROUP by t1.ID) as summation