После этого упражнения по программированию: SQL с Street Fighter , утверждение которого:
Пришло время оценить, какой из величайших бойцов мира прошел до 6 желанных места в полуфинале Чемпионата мира по уличным бойцам. Каждый бой года записывался, и необходимо подсчитывать победы и поражения каждого бойца.
В каждой строке таблицы бойцов, наряду с именем бойца, указывается, выиграли они (1) или проиграли (0) , а также тип хода, который закончил бой.
id
name
won
lost
move_id
victory_moves
id
move
Однако, из-за новых правил в области охраны здоровья и безопасности, все ки-взрывы были объявлены вне закона как потенциальная опасность пожара. Любой бой, который закончился Хадокеном, Шоукеном или Кикокеном, не должен учитываться в общем количестве побед и поражений.
Итак, ваша работа:
Return name, won, and lost columns displaying the name, total number of wins and total number of losses. Group by the fighter's
имя. Не считайте выигрыши или проигрыши, если победным ходом был Хадокен, Шоуокен или Кикокен. Порядок от большинства побед до наименьшего. Верните верх 6. Не беспокойтесь о связях.
Как можно сгруппировать бойцов по их именам?
Мы пробовали:
select name, won, lost from fighters inner join winning_moves on fighters.id=winning_moves.id
группировка по названию в порядке выигрыша des c limit 6;
Однако отображается:
Произошла ошибка в запросе SQL:
PG :: GroupingError: ERROR: столбец "fighters.won" должен появляться в предложении GROUP BY или использоваться в статистической функции LINE 3: выбрать имя, выиграл, проиграл из внутреннего соединения бойцов win_move ...
Кроме того, мы также попытались включить все выбранные строки:
select name, won, lost from fighters inner join winning_moves on fighters.id=winning_moves.id
group by name,won,lost order by won desc limit 6;
Но результаты отличаются от ожидаемых.
Ожидаемые:
name won lost
Sakura 44 15
Cammy 44 17
Rose 42 19
Karin 42 13
Dhalsim 40 15
Ryu 39 16
Факт:
name won lost
Vega 2 1
Guile 2 1
Ryu 2 1
Rose 1 0
Vega 1 0
Zangief 1 0
Кроме того, мы прочитали: