получить максимум из таблицы, где требуется сумма - PullRequest
0 голосов
/ 20 декабря 2009

Предположим, у меня есть таблица со следующими данными:

gameId  difficultyLevel  numberOfQuestions
--------------------------------------------
1           1                 2
1           2                 2
1           3                 1

В этом примере игра настроена на 5 вопросов, но я ищу оператор SQL, который будет работать для n количества вопросов.

Что мне нужно, это оператор SQL, который задает вопрос, displayOrder вернет текущий уровень сложности вопроса. Например - при заданном displayOrder 3 с данными таблицы, приведенными выше, будет возвращено 2.

Кто-нибудь может посоветовать, как должен выглядеть запрос?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2009

Я бы порекомендовал игровой стол с соотношением 1: m и таблицей вопросов.

Вы не должны повторять столбцы в таблице - это нарушает первую нормальную форму.

Примерно так:

create table if not exists game
(   
    game_id bigint not null auto_increment,
    name varchar(64),
    description varchar(64),
    primary key (game_id)    
);

create table if not exists question
(   
    question_id bigint not null auto_increment,
    text varchar(64),
    difficulty int default 1,
    game_id bigint,
    primary key (question_id)    ,
    foreign key game_id references game(game_id)
);

select 
game.game_id, name, description, question_id, text, difficulty
game left join question
on game.game_id = question.game_id
order by question_id;
0 голосов
/ 20 декабря 2009

все может быть проще, если вы измените свой дизайн, как рекомендует Даффимо, но если вы должны сделать это таким образом, вот запрос, который должен помочь.

SELECT MIN(difficultyLevel) as difficltyLevel
FROM 
(
    SELECT difficltyLevel, (SELECT sum(numberOfQuestions) FROM yourtable sub WHERE sub.difficultyLevel <= yt.difficultyLevel ) AS questionTotal
    FROM yourTable yt
) AS innerSQL
WHERE innerSQL.questionTotal >= @displayOrder
...