SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.04.2019 11:59:46

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Помогите с задачей

Всем привет! Плиз помогите решить задачку по теме "Объединение с помощью UNION: сортировка")) Не пойму что конкретно надо сделать. Нужно составить SQL-запрос.
Не кидайтесь тапками)) Я не волшебник,я только учусь)))

Вот задача:
На главной странице сайта выводится ТОП10 компьютерных игр. Чтобы вывод был разнообразным — берут по две самых популярных игры из 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 |


Заранее спасибо.

Неактивен

 

#2 04.04.2019 12:33:08

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите с задачей

select id, name, rating,  'Action' as genre from games where category_id=1
union all
...
select id, name, rating,  'Shooter' as genre from games where category_id=5
order by rating desc, id;

Неактивен

 

#3 04.04.2019 13:10:13

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите с задачей

vasya написал:

select id, name, rating,  'Action' as genre from games where category_id=1
union all
...
select id, name, rating,  'Shooter' as genre from games where category_id=5
order by rating desc, id;

Сделал так:
select id, name, rating,  'Action' as genre from games where category_id=1
union all
select id, name, rating,  'RPG' as genre from games where category_id=2
union all
select id, name, rating,  'Adventure' as genre from games where category_id=3
union all
select id, name, rating,  'Strategy' as genre from games where category_id=4
union all
select id, name, rating,  'Shooter' as genre from games where category_id=5
order by rating desc, id;

но ответ такой вернуло
The query should return 10 records

Query result:
+----+---------------------------------------+--------+-----------+
| id | name                                  | rating | genre     |
+----+---------------------------------------+--------+-----------+
| 1  | The Witcher 3: Wild Hunt              | 9.61   | RPG       |
| 4  | The Last of Us                        | 9.45   | Adventure |
| 14 | Uncharted 4: A Thief's End            | 9.33   | Adventure |
| 19 | Warcraft III: Reign of Chaos          | 9.29   | Strategy  |
| 16 | Metro: Last Light                     | 9.25   | Shooter   |
| 9  | Diablo III                            | 9.22   | RPG       |
| 6  | Grand Theft Auto V                    | 9.18   | Action    |
| 2  | Warcraft III: The Frozen Throne       | 9.00   | Strategy  |
| 13 | Mass Effect 3                         | 9.00   | RPG       |
| 17 | Outlast                               | 9.00   | Action    |
| 20 | The Walking Dead: The Game - Season 2 | 9.00   | Adventure |
| 5  | Mafia II                              | 8.94   | Adventure |
| 8  | Plants vs. Zombies                    | 8.90   | Strategy  |
| 15 | Call of Duty: Black Ops II            | 8.88   | RPG       |
| 12 | Doom                                  | 8.75   | Shooter   |
| 7  | Far Cry 3                             | 8.67   | Shooter   |
| 3  | Max Payne 2: The Fall of Max Payne    | 8.63   | Action    |
+----+---------------------------------------+--------+-----------+
Affected rows: 17

Что то не так(((

Неактивен

 

#4 04.04.2019 13:43:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите с задачей

select id, name, rating,  'Action' as genre from games where category_id=1 order by rating desc, id limit 2
union all
...

Неактивен

 

#5 04.04.2019 14:15:49

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите с задачей

vasya написал:

select id, name, rating,  'Action' as genre from games where category_id=1 order by rating desc, id limit 2
union all
...

Спасибо, помогло)) только надо было ещё все SELECTы  в скобки "завернуть" :-)

Неактивен

 

#6 04.04.2019 14:29:14

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите с задачей

Вам для зачета?
Тогда попробуйте применить 3ий способ из выбрать несколько записей из каждой группы. Как раз и union all будет использован. Препод явно оценит smile

Неактивен

 

#7 04.04.2019 14:52:47

Lugner32
Завсегдатай
Зарегистрирован: 04.04.2019
Сообщений: 25

Re: Помогите с задачей

vasya написал:

Вам для зачета?
Тогда попробуйте применить 3ий способ из выбрать несколько записей из каждой группы. Как раз и union all будет использован. Препод явно оценит smile

Нет не для зачёта)))Для прохождения курса Основы SQL..  У меня на работе коллеги с IT отдела зовут меня к ним в отдел ( мол типа я шаристый в ПК и т.п теме) Вот посоветовали изучить SQL как основу, а остальному научат сами. Вот я уже почти весь курс завершил осталось немного. Мне и самому эта тема интереснее моей текущей работы.. Но вот не всегда получается вникнуть без чьей-либо помощи :-)

В общем спасибо огромное за помощь :-)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson