【发布时间】:2011-09-21 19:06:16
【问题描述】:
在 MySQL 中遇到 SQL 问题。不确定正确的是带回我的用户赢得的所有奖项...但只有中最高的AwardLevel奖 他们赢得了。关系如下:
一个用户可以赢得许多AwardLevel(s)。每个 AwardLevel 都与一个称为 Award 的类别相关联。 AwardLevels 有难度等级(1、2 或 3) 这类似于 Stackoverflow 的徽章,并通过铜、银和金类型的奖项。
我正在尝试为用户恢复所有奖项,但已过滤到最大(难度)评级。例如,要让用户达到 3 级(难度 = 3),他们必须首先获得难度 = 1,然后难度 = 2。我不想在我的查询中只显示最高 (MAX) 的所有三个级别。我当前查询的问题是 GROUP BY 似乎抓住了它为 Award 找到的第一条记录。有时哪个不是难度 = 3。不确定我是否应该将 MAX 表达式放在查询中的其他位置。
更新的查询:
SELECT a.*, MAX(awlev.difficulty)
FROM Award AS a
INNER JOIN AwardLevel AS awlev ON awlev.id = a.level_id
WHERE a.user_id = 3 -- just a sample user_id
GROUP BY awlev.category_id
表格设置: -- 注意:我忘记了与用户相关的表 -- 为了在这个表格设置中赢得 AwardLevels,我称之为 UserAwardLevels
CREATE TABLE Users (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
fullname VARCHAR(100)
);
CREATE TABLE AwardLevels (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
levelname VARCHAR(100),
difficulty INT
);
CREATE TABLE Awards (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
awardname VARCHAR(100)
);
CREATE TABLE UserAwardLevels (
user_id INT,
awardlevel_id INT
);
CREATE TABLE AwardLevels (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
levelname VARCHAR(100),
difficulty INT
);
【问题讨论】:
-
同一奖励等级的用户能否获得多个奖励?
-
在您的查询中没有别名为
t的表。请修复。 -
不太了解您的结构。 t.user_id 中的 t 是什么?你能发布表格的结构吗?
-
更正了这个问题。我试图简化问题。归结为主要问题。查询已更正。 user_id 字段是奖励记录的一部分。
-
@Scrum 大师,您只能赢得 1 次 1 级。您可以在一个类别(即奖项)中赢得 1 级、2 级和 3 级。
标签: mysql sql join group-by aggregate-functions