【问题标题】:Complex SQL Count Query复杂 SQL 计数查询
【发布时间】: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 级联在错误的表中。
  • 谢谢,但具体应该在哪里呢?

标签: sql hsqldb


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多