Группировка по требует, чтобы мы включили все выбранные строки, когда нам нужны результаты, сгруппированные по одной строке - PullRequest
0 голосов
/ 05 апреля 2020

После этого упражнения по программированию: 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

Кроме того, мы прочитали:

1 Ответ

0 голосов
/ 05 апреля 2020

Полагаю, вам нужно иметь sum (), чтобы агрегировать идентификаторы и выиграть n потерь. Кроме того, вам не нужно присоединяться, поскольку вы не хотите показывать ход в первом запросе

     select name, sum(won) as wins, 
     sum(lost) 
     from fighters 
    group by name order by sum(won) 
   desc limit 6;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...