假设我有一个包含以下数据的表:
gameId difficultyLevel numberOfQuestions
--------------------------------------------
1 1 2
1 2 2
1 3 1
在这个例子中,游戏配置了5个问题,但我正在寻找一个适用于 n 个问题的SQL语句。
我需要的是一个给出问题的SQL语句,displayOrder
将返回当前难题级别。例如 - 如果displayOrder为3,上面的表数据将返回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)
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