我有一個調查的數據庫設計。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個表與我的問題無關。
我需要的是爲所有用戶選擇平均值(值),其中名稱如'%'。
希望這是明確的謝謝。
我有一個調查的數據庫設計。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個表與我的問題無關。
我需要的是爲所有用戶選擇平均值(值),其中名稱如'%'。
希望這是明確的謝謝。
嘗試以下操作:
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%'
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
:
你能做到這一點。您可以將u.user_id
添加到您的選擇列表中,然後按組進行分組(如PatrikAkerstrand所做的那樣) - 如果您的名稱不是唯一的,您必須執行此操作
AVG()需要一個組來處理。 – Crontab 2012-03-07 12:01:08
@Crontab:根據數據庫,它可能不一定是真實的。如果沒有指定GROUP BY,至少MySQL會創建結果集中所有行的隱式組 – PatrikAkerstrand 2012-03-07 12:03:01
@PatrikAkerstrand:true,我假設提交者希望像您在答案中提到的那樣爲每個用戶提供平均值。 – Crontab 2012-03-07 12:04:27