【发布时间】:2019-01-15 13:16:59
【问题描述】:
我正在尝试在 LibreOffice Base / HSQLDB 中构建一个新数据库,据称它支持标准 SQL,但可能不如 SQL-server 或 Oracle 广泛。
我有一个分数表,其中参与者是俱乐部列表中的一个成员。我需要在团队动态的情况下生成“团队分数”,即它们由每个俱乐部的前 5 名得分组成。
到目前为止,我能够达到的最接近的是:
SELECT "Score", "ShootRecords"."ClubID" FROM "ShootRecords" WHERE "ShootRecords"."ClubID" = 0
UNION
SELECT "Score", "ShootRecords"."ClubID" FROM "ShootRecords" WHERE "ShootRecords"."ClubID" = 1
ORDER BY "Score" DESC
如果我在每个子查询的开头添加 TOP 5 限定符,它会报告为无效 SQL。
如果我将ORDER BY 子句移动到子查询中,它再次报告为无效SQL,但每个子查询都需要按这种方式排序,并且限制为TOP 5 否则结果错误。
我也看过这样的子查询:
SELECT "ClubID"
FROM "Clubs"
WHERE "Clubs"."ClubID" IN
(SELECT "ClubID"
FROM "Clubs", "ShootRecords"
WHERE "Clubs"."ClubID" = "ShootRecords"."ClubID"
)
但排序和子设置再次以错误的顺序完成,或者无效。
我希望看到的是这样的:
Score ClubID
------------------
300 0
299 0
280 0
200 0
190 0
310 1
290 1
277 1
等等
【问题讨论】:
-
应该很简单。请添加一些示例数据和预期结果。
-
您是否尝试在每个联合查询中添加
ORDER BY "Score" DESC LIMIT 5? (ref)。另外,我认为在这种情况下UNION ALL会更好。 -
另外,
TOP 5不是标准 SQL。附加LIMIT 5(这也不是标准的,但得到很好的支持)。 -
LIMIT 5也不是标准 SQL;FETCH FIRST 5 ROWS是。但是,是的,HSQLDB 想要LIMIT 5。 -
出现平局怎么办?我猜是从绑定的成员中任意选择一个成员?
标签: sql hsqldb libreoffice-base