复杂 SQL 计数查询
Posted
技术标签:
【中文标题】复杂 SQL 计数查询【英文标题】:Complex SQL Count Query 【发布时间】: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 级联在错误的表中。 谢谢,但具体应该在哪里呢? 【参考方案1】:这应该是 mysql-Dialect 中的(不是 testet)SQL:
SELECT rp.PROJECT_ID, p.PROJECT_NAME
SUM(CASE WHEN rp.RECORD_ID < 3 THEN 1 ELSE 0 END) AS rating
FROM RECORD_PROJEKT AS rp
JOIN PROJECT AS p ON p.ID = rp.PROJECT_ID
GROUP BY rp.PROJECT_ID
ORDER BY rating DESC
【讨论】:
抱歉,我不明白这对我有什么帮助。 hsql 的语法似乎错误。 @Vaelyr 。 . .该问题被标记为“mysql”而不是“hsql”。 我认为如果您不包含 p.PROJECT_NAME,这应该适用于 HSQLDB。 SELECT rp.PROJECT_ID, SUM(CASE WHEN rp.RECORD_ID以上是关于复杂 SQL 计数查询的主要内容,如果未能解决你的问题,请参考以下文章