Как выполнить запрос SQL, чтобы получить такой результат

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 14.06.2018 00:45

@shrek он есть. Я ожидаю увидеть идентификатор игры, имя игрока и счет. Оценка - это сумма всех ответов corect

Arga Daneshwara 14.06.2018 00:48

Что ты пробовал? Поиск с использованием join, sum и group by ...

sgeddes 14.06.2018 00:49

@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;

Arga Daneshwara 14.06.2018 01:01

Предоставление фактического сообщения об ошибке может помочь.

Dave Costa 14.06.2018 01:19

Первая очевидная проблема заключается в том, что ваш запрос ссылается на столбец a.correct, которого нет в предоставленных определениях таблиц. Предположительно вы имеете в виду a.isCorrect.

Dave Costa 14.06.2018 01:20

Вы говорите, что answer.isCorrect является логическим. В SQL нет логического типа. Ваш тег подразумевает, что вы используете Oracle; в Oracle, конечно, нет такой вещи, как столбец логического типа. Какой тип колонны на самом деле?

Dave Costa 14.06.2018 01:21

Помимо вышеупомянутых проблем в вашем запросе / вопросе, в вашем запросе используются game.player_p_id и player.p_id, но этих столбцов нет в описании вашей схемы. Но я думаю, помимо этих проблем, вам в основном нужен GROUP BY g.id, g.start_time, p.id, p.username.

sticky bit 14.06.2018 01:27
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
8
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вашего запроса есть две очевидные синтаксические проблемы.

Он ссылается на разные столбцы под разными именами, чем те, которые вы даете в определениях таблиц. Например, запрос ссылается на 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 хорошего дня!

Arga Daneshwara 14.06.2018 01:34

Другие вопросы по теме