从需要总和的表中获取最大值

时间:2009-12-20 16:32:31

标签: sql-server sum max

假设我有一个包含以下数据的表:

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

在这个例子中,游戏配置了5个问题,但我正在寻找一个适用于 n 个问题的SQL语句。

我需要的是一个给出问题的SQL语句,displayOrder将返回当前难题级别。例如 - 如果displayOrder为3,上面的表数据将返回2.

有人可以建议查询应该如何吗?

2 个答案:

答案 0 :(得分:2)

我建议使用与问题表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;

答案 1 :(得分:0)

如果你像duffymo建议那样改变你的设计,对你来说可能会更容易,但如果你必须这样做,那么这是一个应该做的诀窍。

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
相关问题