【发布时间】:2013-12-14 12:10:09
【问题描述】:
您好,我的作业被一个 SQL 查询卡住了,希望能得到一些帮助。
我需要获取执行效果最好的项目的项目 ID - (VERY_GOOD 记录数 + GOOD 记录数) - (VERY_BAD 记录数 + BAD 记录数) 最大的项目
我在数据库 (HSQLDB) 中的架构和测试记录
CREATE TABLE
PROJECT
(
ID IDENTITY NOT NULL PRIMARY KEY,
PROJECT_NAME VARCHAR(255) NOT NULL
);
CREATE TABLE
RECORD
(
ID IDENTITY NOT NULL PRIMARY KEY,
RESULT VARCHAR(255) NOT NULL,
);
CREATE TABLE
RECORD_PROJECT
(
PROJECT_ID INTEGER NOT NULL,
RECORD_ID INTEGER NOT NULL,
PRIMARY KEY(PROJECT_ID, RECORD_ID),
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(ID) ON DELETE CASCADE,
FOREIGN KEY (RECORD_ID) REFERENCES RECORD(ID)
);
以及测试数据:
INSERT INTO PROJECT (PROJECT_NAME) VALUES ('Bake a cake');
INSERT INTO PROJECT (PROJECT_NAME) VALUES ('Clean the house');
INSERT INTO RECORD (RESULT) VALUES ('GOOD');
INSERT INTO RECORD (RESULT) VALUES ('VERY_GOOD');
INSERT INTO RECORD (RESULT) VALUES ('VERY_GOOD');
INSERT INTO RECORD (RESULT) VALUES ('BAD');
INSERT INTO RECORD (RESULT) VALUES ('VERY_BAD');
INSERT INTO RECORD_PROJECT (PROJECT_ID, RECORD_ID) VALUES (0,0);
INSERT INTO RECORD_PROJECT (PROJECT_ID, RECORD_ID) VALUES (1,1);
INSERT INTO RECORD_PROJECT (PROJECT_ID, RECORD_ID) VALUES (1,2);
INSERT INTO RECORD_PROJECT (PROJECT_ID, RECORD_ID) VALUES (0,3);
INSERT INTO RECORD_PROJECT (PROJECT_ID, RECORD_ID) VALUES (1,4);
(我从表格中删除了不相关的字段)
因此,有了这些数据,我有 3 条好记录和 2 条坏记录,我需要获得“评级”最高的项目,根据目前的情况,这将是 Clean the house其他项目的 3 个好评超过 2 个差评。
也许有人会解决这个问题,谢谢!
【问题讨论】:
-
record.result 需要使用 char 吗?
-
身份?这对我来说是新的
-
记录是硬编码到数据库中的值,我也可以通过枚举来解决。对于结果,我只需要具有最佳结果的项目的 ID。
-
与您的问题无关,但 on delete 级联在错误的表中。
-
谢谢,但具体应该在哪里呢?