Задавайте вопросы, мы ответим
Вы не зашли.
Всем привет! И снова задачка:
На главной странице сайта выводится ТОП5 компьютерных игр. Чтобы вывод был разнообразным — берут по две самых популярных игры из 5 категорий, а затем сортируют полученные данные по рейтингу в прямом порядке. Строки с одинаковым рейтингом отсортируйте по id.
Получите из таблицы games данные для вывода на главную страницу сайта для категорий: 1 - Action, 2 - RPG, 3 - Adventure, 4 - Strategy и 5 - Shooter. Выведите поля id, name, rating и genre, где genre — название категории.
games
id category_id name rating year
1 2 The Witcher 3: Wild Hunt 9.61 2015
2 4 Warcraft III: The Frozen Throne 9.00 2003
3 1 Max Payne 2: The Fall of Max Payne 8.63 2003
4 3 The Last of Us 9.45 2013
5 3 Mafia II 8.94 2010
6 1 Grand Theft Auto V 9.18 2013
7 5 Far Cry 3 8.67 2012
8 4 Plants vs. Zombies 8.90 2009
9 2 Diablo III 9.22 2012
10 8 Mortal Kombat X 8.70 2015
11 7 Tetris 9.05 1984
12 5 Doom 8.75 2016
13 2 Mass Effect 3 9.00 2012
14 3 Uncharted 4: A Thief's End 9.33 2016
15 2 Call of Duty: Black Ops II 8.88 2012
16 5 Metro: Last Light 9.25 2013
17 1 Outlast 9.00 2013
18 6 Need for Speed: Most Wanted 9.08 2005
19 4 Warcraft III: Reign of Chaos 9.29 2002
20 3 The Walking Dead: The Game - Season 2 9.00 2014
Пропробовал так:
SELECT id, name, rating, genre FROM
(SELECT
id,
name,
rating,
'Action' as genre
FROM
games
WHERE category_id = 1
ORDER BY rating DESC LIMIT 2) as genre
UNION
(SELECT
id,
name,
rating,
'RPG' as genre
FROM
games
WHERE category_id = 2
ORDER BY rating DESC LIMIT 2)
UNION
(SELECT
id,
name,
rating,
'Adventure' as genre
FROM
games
WHERE category_id = 3
ORDER BY rating DESC LIMIT 2)
UNION
(SELECT
id,
name,
rating,
'Strategy' as genre
FROM
games
WHERE category_id = 4
ORDER BY rating DESC LIMIT 2)
UNION
(SELECT
id,
name,
rating,
'Shooter' as genre
FROM
games
WHERE category_id = 5
ORDER BY rating DESC LIMIT 2)
ORDER BY rating , id LIMIT 5
Результат такой:Wrong records selected
Query result:
+----+---------------------------------+--------+----------+
| id | name | rating | genre |
+----+---------------------------------+--------+----------+
| 12 | Doom | 8.75 | Shooter |
| 2 | Warcraft III: The Frozen Throne | 9.00 | Strategy |
| 17 | Outlast | 9.00 | Action |
| 6 | Grand Theft Auto V | 9.18 | Action |
| 9 | Diablo III | 9.22 | RPG |
+----+---------------------------------+--------+----------+
Affected rows: 5
Помогите исправить
Заранее спасибо
Неактивен
зачем limit 5 в конце?
Неактивен
vasya написал:
зачем limit 5 в конце?
Так в условии же ТОП 5... Те. как я понял по 1 из каждой категории... если убрать то система ругается.. пишет что Запрос должен вернуть 5 записей
Неактивен
Как видно из возвращенной таблицы у меня дубль категории 'ACTION' как его убрать? По идее должен быть 'Adventure' вместо одного из них
Неактивен
Lugner32 написал:
Как видно из возвращенной таблицы у меня дубль категории 'ACTION' как его убрать? По идее должен быть 'Adventure' вместо одного из них
из условия это не следует
имхо, ваш ответ соответствует условию задачи
если это тест, попробуйте методом тыка
возможно криво сформулировано и после окончательной сортировки нужно брать 5 последних (что ближе по смыслу к top 5), а не первых
Неактивен
vasya написал:
Lugner32 написал:
Как видно из возвращенной таблицы у меня дубль категории 'ACTION' как его убрать? По идее должен быть 'Adventure' вместо одного из них
из условия это не следует
имхо, ваш ответ соответствует условию задачи
если это тест, попробуйте методом тыка
возможно криво сформулировано и после окончательной сортировки нужно брать 5 последних (что ближе по смыслу к top 5), а не первых
Это задача на онлайн курсе. Я скинул запрос преподу.. Посмотрим что он ответит..
Спасибо!
Неактивен
Вот ответ преподавателя: в последней строке надо добавить DESC для рейтинга. А потом написать еще один финальный внешний запрос.
И тут я понял что нифига не понял
Неактивен
vasya написал:
из условия это не следует
имхо, ваш ответ соответствует условию задачи
если это тест, попробуйте методом тыка
возможно криво сформулировано и после окончательной сортировки нужно брать 5 последних (что ближе по смыслу к top 5), а не первых
SELECT id, name,rating , genre FROM (SELECT id, name,rating , genre FROM
(SELECT id, name, rating, 'Action' as genre
FROM games WHERE category_id = 1
ORDER BY rating DESC LIMIT 2) as genre
UNION
(SELECT id, name,rating, 'RPG' as genre
FROM games WHERE category_id = 2
ORDER BY rating DESC LIMIT 2)
UNION
(SELECT id, name, rating, 'Adventure' as genre
FROM games
WHERE category_id = 3
ORDER BY rating DESC LIMIT 2)
UNION
(SELECT id, name,rating, 'Strategy' as genre
FROM games
WHERE category_id = 4
ORDER BY rating DESC LIMIT 2)
UNION
(SELECT id, name, rating, 'Shooter' as genre
FROM games
WHERE category_id = 5
ORDER BY rating DESC LIMIT 2)
ORDER BY rating desc, id LIMIT 5) as name
ORDER BY rating, id
В общем вот так получилось Действительно в результирующей таблице не должно было быть строго по одной категории..
Query result:
+----+------------------------------+--------+-----------+
| id | name | rating | genre |
+----+------------------------------+--------+-----------+
| 16 | Metro: Last Light | 9.25 | Shooter |
| 19 | Warcraft III: Reign of Chaos | 9.29 | Strategy |
| 14 | Uncharted 4: A Thief's End | 9.33 | Adventure |
| 4 | The Last of Us | 9.45 | Adventure |
| 1 | The Witcher 3: Wild Hunt | 9.61 | RPG |
+----+------------------------------+--------+-----------+
Affected rows: 5
Неактивен