MySQL внутренний присоединяется? - PullRequest
1 голос
/ 07 марта 2012

У меня есть дизайн базы данных для опроса.

У меня есть таблица USERS с user_id PK и именем.

QUESTION с question_id и question_text.

POSSIBLE_ANSWER с answer_idPK, значение, текст.

Также у меня есть USER_ANSWERS с user_id от пользователей, Question_id, answer_id.

Также есть еще 3 другие таблицы, не относящиеся к моему вопросу.

ЧтоМне нужно, чтобы выбрать avg (значение) для всех пользователей, имя которых, как'm% '.

Надеюсь, это понятно, спасибо.

Ответы [ 3 ]

2 голосов
/ 07 марта 2012
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'. Этот запрос дает среднее значение PER пользователя, чье имя начинается с m.

2 голосов
/ 07 марта 2012

Вы можете сделать это:

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) - что вам нужно сделать, если ваши имена не уникальны

2 голосов
/ 07 марта 2012

попробуйте следующее:

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%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...