2014-01-20 4 views
0

У меня есть две таблицы:Объединить две таблицы и группы по проблемам

Проблемы

id | name

Ответы

id | problem_id | user_id | value

У меня есть следующее заявление.

SELECT 
`problems`.name, 
problem_id, 
sum(value) as knowledge, 
COUNT(*) as attempts FROM `responses` 
LEFT JOIN `problems` ON `problems`.id = `responses`.problem_id 
WHERE problem_id IS NOT NULL AND user_id = 4 
GROUP BY problem_id 

Он производит список как так:

| name  | problem_id | knowledge | attempts | 
| NULL  | 1   | 6   | 6  | 
| NULL  | 2   | 5   | 6  | 
| NULL  | 3   | 4   | 6  | 
| NULL  | 4   | 3   | 5  | 

я пропускаю что-то и я был бы признателен, если кто-то может помочь формат:

| name  | problem_id | knowledge | attempts | 
| Problem A | 1   | 6   | 6  | 
| Problem B | 2   | 5   | 6  | 
| Problem C | 3   | 4   | 6  | 
| Problem D | 4   | 3   | 5  | 
+0

Пожалуйста, прекратите использование 'GROUP BY' таким образом. Это не стандарт ANSI. – Kermit

+0

Как я могу ориентироваться на стандарты ANSI? – youanden

+0

Рассмотрите возможность предоставления надлежащих DDL и/или sqlfiddle ВМЕСТЕ С УДАЛЕННЫМ РЕЗУЛЬТАТОМ – Strawberry

ответ

2

Попробуйте это.

select p.`name`, p.`id`, r.`user_id`, sum(r.`value`) as knowledge 
from 
`responses` r 
join `problems` p on r.`problem_id` = p.`id` 
where 
r.`user_id` = 4 
group by p.`name`, p.`id` 
+0

Спасибо, @ Питер-Петров! – youanden

1

Вы не можете иметь в вашем ВЫБЕРИТЕ то, что не является ни агрегатной функцией (например, SUM, ни AVG), ни переменной частью GROUP BY.

В вашем случае это имя не является ни тем, ни другим.

Некоторые СУБД могут позволить вам это сделать (MySQL), но результат непредсказуем.

Решение:

SELECT 
`problems`.name, 
problem_id, 
sum(value) as knowledge, 
COUNT(*) as attempts FROM `responses` 
LEFT JOIN `problems` ON `problems`.id = `responses`.problem_id 
WHERE problem_id IS NOT NULL AND user_id = 4 
GROUP BY problem_id, problems.name 
+0

Это действительно комментарий, хотя, честно говоря, на самом деле не вопрос. – Strawberry

+0

LOL вы правы, перечитывая вопрос, я тоже это понял. –

+0

Какое решение тогда? –

Смежные вопросы