game
-----
id
start_time
player_p_id
player
-------
p_id
username
answer
------
id
correct
text
game_answer
-----------
game_id
answers_id
Всем привет! Как мне создать SQL-запрос для выбора (game.id, player.name, [score])?
Я ожидаю получить в результате идентификатор игры, имя игрока и счет. Оценка - это сумма правильных ответов.
Я пробовал этот запрос, но он не работает
SELECT g.id, p.username, g.start_time, sum(a.correct)
from GAME g
INNER JOIN PLAYER p ON g.player_p_id = p.p_id
INNER JOIN GAME_ANSWER ga ON ga.GAME_ID = g.ID
INNER JOIN ANSWER a ON a.id = ga.ANSWERS_ID
ORDER BY g.id;
Примечание: ответ. Правильный: o или 1
@shrek он есть. Я ожидаю увидеть идентификатор игры, имя игрока и счет. Оценка - это сумма всех ответов corect
Что ты пробовал? Поиск с использованием join, sum и group by ...
@sgeddes Я пробовал это, но это ошибка ВЫБЕРИТЕ отличные g.id, p.username, g.start_time, sum (a.correct) из ИГРЫ g ВНУТРЕННИЙ СОЕДИНЕНИЕ ИГРОКА p НА g.player_p_id = p.p_id INNER JOIN GAME_ANSWER ga ON ga. GAME_ID = g.ID ВНУТРЕННИЙ ПРИСОЕДИНЕНИЕ ОТВЕТИТЬ a ON a.id = ga.ANSWERS_ID ЗАКАЗАТЬ ПО g.id;
Предоставление фактического сообщения об ошибке может помочь.
Первая очевидная проблема заключается в том, что ваш запрос ссылается на столбец a.correct, которого нет в предоставленных определениях таблиц. Предположительно вы имеете в виду a.isCorrect.
Вы говорите, что answer.isCorrect является логическим. В SQL нет логического типа. Ваш тег подразумевает, что вы используете Oracle; в Oracle, конечно, нет такой вещи, как столбец логического типа. Какой тип колонны на самом деле?
Помимо вышеупомянутых проблем в вашем запросе / вопросе, в вашем запросе используются game.player_p_id и player.p_id, но этих столбцов нет в описании вашей схемы. Но я думаю, помимо этих проблем, вам в основном нужен GROUP BY g.id, g.start_time, p.id, p.username.


У вашего запроса есть две очевидные синтаксические проблемы.
Он ссылается на разные столбцы под разными именами, чем те, которые вы даете в определениях таблиц. Например, запрос ссылается на a.correct, но вы показываете, что столбец в answers называется «isCorrect. Вероятно, вы получаете сообщения об ошибках, указывающие, что столбцы не существуют. Используйте правильные имена для всех столбцов.
(Похоже, вы обновили определения таблиц, чтобы имена столбцов совпадали. Таким образом, описанное выше не может быть проблемой.)
В запросе нет предложения GROUP BY. СУММ - это групповая функция. Если у вас есть как разгруппированные значения (g.id, p.username, g.start_time), так и сгруппированные значения в вашем списке выбора, вам понадобится предложение GROUP BY. Обычно вы просто включаете каждый столбец из списка выбора, который не окружен функцией группы. В этом случае похоже, что вам нужен GROUP BY g.id, p.username, g.start_time. Это должно предшествовать предложению ORDER BY.
Вы выяснили, что isCorrect содержит 0 или 1, поэтому с другими исправлениями функция СУММ должна дать желаемый результат.
УХ ТЫ! Я немного изменил структуру, чтобы было легче. Но после того, как я наведу заказ, он работает. Ты спас мне жизнь: D хорошего дня!
Пожалуйста, подробно опишите входные данные и какой результат вы ожидаете увидеть.