You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibreOffice Base如何在查询中添加基于耗时的Placement排名字段?

给LibreOffice Base竞赛查询添加排名字段

直接把你的排名计算逻辑改成关联子查询,替换主查询里的(HERE)就行,不用手动拼接teamId,子查询会自动匹配当前行的队伍ID:

SELECT 
    "Team_ID", 
    "Team_Shortname", 
    "TotalTimeInSeconds",
    (
        SELECT COUNT(*) + 1 
        FROM "Team" AS t2 
        WHERE t2."TotalTimeInSeconds" < t1."TotalTimeInSeconds"
    ) AS "Placement"
FROM "Team" AS t1
ORDER BY "TotalTimeInSeconds" ASC;

关键说明

  • 给主表Team起别名t1,子查询里的表起t2,避免同一张表被重复引用时混淆
  • 子查询会统计所有耗时比当前队伍短的队伍总数,加1是因为排名从1开始——比如没人比你快,那你就是第1名
  • 最后加ORDER BY "TotalTimeInSeconds" ASC,能让结果按耗时从短到长展示,和排名顺序对应

处理并列排名的情况

如果有多个队伍耗时完全一样,上面的语句会给他们不同的排名(比如两个最快的队伍,会显示第1和第2)。要是想让相同耗时的队伍排名一致,用下面的写法:

SELECT 
    "Team_ID", 
    "Team_Shortname", 
    "TotalTimeInSeconds",
    (
        SELECT COUNT(DISTINCT "TotalTimeInSeconds") + 1 
        FROM "Team" AS t2 
        WHERE t2."TotalTimeInSeconds" < t1."TotalTimeInSeconds"
    ) AS "Placement"
FROM "Team" AS t1
ORDER BY "TotalTimeInSeconds" ASC;

这里用COUNT(DISTINCT "TotalTimeInSeconds"),统计的是比当前耗时短的不同耗时值的数量,加1后,相同耗时的队伍就会拿到一样的排名。

内容的提问来源于stack exchange,提问作者schuler-ph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:51:14