From faa91b8bd4042845d3597d83ada709f8830aae60 Mon Sep 17 00:00:00 2001 From: molanp <104612722+molanp@users.noreply.github.com> Date: Mon, 14 Jul 2025 23:20:13 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=91=20=E4=BF=AE=E5=A4=8D=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E8=BF=81=E7=A7=BBSQL=20(#1969)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * perf(zhenxun): 优化签到和道具 SQL 查询语句 - 改为通用SQL * style(zhenxun): 优化签到 SQL 查询格式 - 调整 SQL 查询的缩进和格式,提高可读性 - 没有修改实际的查询逻辑,仅优化代码结构 --------- Co-authored-by: HibiKier <45528451+HibiKier@users.noreply.github.com> --- zhenxun/builtin_plugins/__init__.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/zhenxun/builtin_plugins/__init__.py b/zhenxun/builtin_plugins/__init__.py index f2688905..4003e506 100644 --- a/zhenxun/builtin_plugins/__init__.py +++ b/zhenxun/builtin_plugins/__init__.py @@ -50,22 +50,31 @@ async def _(bot: Bot): SIGN_SQL = """ -select distinct on("user_id") t1.user_id, t1.checkin_count, t1.add_probability, -t1.specify_probability, t1.impression -from public.sign_group_users t1 - join ( - select user_id, max(t2.impression) as max_impression - from public.sign_group_users t2 - group by user_id - ) t on t.user_id = t1.user_id and t.max_impression = t1.impression +SELECT user_id, checkin_count, add_probability, specify_probability, impression +FROM ( + SELECT + t1.user_id, + t1.checkin_count, + t1.add_probability, + t1.specify_probability, + t1.impression, + ROW_NUMBER() OVER(PARTITION BY t1.user_id ORDER BY t1.impression DESC) AS rn + FROM sign_group_users t1 + INNER JOIN ( + SELECT user_id, MAX(impression) AS max_impression + FROM sign_group_users + GROUP BY user_id + ) t2 ON t2.user_id = t1.user_id AND t2.max_impression = t1.impression +) t +WHERE rn = 1 """ BAG_SQL = """ select t1.user_id, t1.gold, t1.property -from public.bag_users t1 +from bag_users t1 join ( select user_id, max(t2.gold) as max_gold - from public.bag_users t2 + from bag_users t2 group by user_id ) t on t.user_id = t1.user_id and t.max_gold = t1.gold """