2012-03-07 184 views
1

我有一個調查的數據庫設計。MySQL內部連接?

我有一個表USERS與user_id PK和名稱。

問題與question_id和question_text。

POSSIBLE_ANSWER with answer_id PK,value,text。

此外,我有USER_ANSWERS與用戶user_id,Question_id,answer_id。

還有一些其他3個表與我的問題無關。

我需要的是爲所有用戶選擇平均值(值),其中名稱如'%'。

希望這是明確的謝謝。

回答

2

嘗試以下操作:

select avg(PA.value) 
from POSSIBLE_ANSWER PA 
inner join USER_ANSWERS UA on PA.answer_id = UA.answer_id 
inner join USERS U on U.user_id = UA.user_id 
where U.name like 'm%' 
+0

AVG()需要一個組來處理。 – Crontab 2012-03-07 12:01:08

+0

@Crontab:根據數據庫,它可能不一定是真實的。如果沒有指定GROUP BY,至少MySQL會創建結果集中所有行的隱式組 – PatrikAkerstrand 2012-03-07 12:03:01

+0

@PatrikAkerstrand:true,我假設提交者希望像您在答案中提到的那樣爲每個用戶提供平均值。 – Crontab 2012-03-07 12:04:27

2
SELECT u.user_id, u.name, AVG(pa.value) 
FROM USER_ANSWERS ua 
INNER JOIN POSSIBLE_ANSWER pa ON pa.answer_id = ua.answer_id 
INNER JOIN USERS u ON ua.user_id = u.user_id 
WHERE u.name LIKE 'm%' 
GROUP BY u.user_id 

刪除GROUP BY,如果你希望所有用戶的平均使用名稱以 'M'。該查詢給出了名稱以m開頭的平均PER用戶。雖然我仍然有興趣閱讀你所到目前爲止已經試過

SELECT u.name, AVG(pa.value) AS avgvalue 
FROM USER_ANSWERS ua 
INNER JOIN USERS u ON u.user_id = ua.user_id 
INNER JOIN POSSIBLE_ANSWER pa ON pa.answer_id = ua.answer_id 
WHERE u.name LIKE 'm%' 
GROUP BY u.name 

2

你能做到這一點。您可以將u.user_id添加到您的選擇列表中,然後按組進行分組(如PatrikAkerstrand所做的那樣) - 如果您的名稱不是唯一的,您必須執行此操作