2017-02-01 2 views
0

Итак, у меня есть таблица под названием «атлеты», в которой есть пять полей: спортсмены, спорт, золото, серебро, бронза. Из этой таблицы мы создаем вид, называемый most_played_sports, который содержит все виды спорта, в которых более 500 спортсменов. Задача состоит в том, чтобы найти различные пары спортивных состязаний (sport_1, sport_2), используя вышеприведенное представление, так что количество медалей для sport_1 строго меньше, чем sport_2.запрос SQLite висит

Запрос Я попытался это:

create view if not exists most_played_sports as select sport, sum(gold)+sum(silver)+sum(bronze) as medal_count from athletes 
    group by sport 
    having count(id) >= 500; 

select distinct athletes.sport as sport_1, most_played_sports.sport as sport_2 
    from athletes cross join most_played_sports 
    where sport_1 > sport_2 and 
    ((select medal_count from most_played_sports where sport=sport_1) < (select medal_count from most_played_sports where sport=sport_2)); 

Второй запрос возвращает некоторые результаты, но висит. Есть ли лучший способ сделать эту задачу, чем я, что я пробовал?

ответ

1

Я думаю, что вы хотите автообъединение:

select mps.sport as sport_1, mps2.sport as sport_2 
from most_played_sports mps join 
    most_played_sports mps2 
    on mps.medal_count < mps2.medal_count; 

вопрос не предполагает никакой необходимости использовать исходную таблицу.

Смежные вопросы