sách gpt4 ai đã đi

以周为单位汇总的每天的 PostgreSQL 数量

In lại 作者:行者123 更新时间:2023-11-29 12:22:25 34 4
mua khóa gpt4 Nike

我一整天都在努力寻找解决这一挑战的办法。

我有一张 table :

  id | amount | type | date | description | club_id 
-------+---------+------+----------------------------+---------------------------------------+---------+--------
783 | 10000 | 5 | 2011-08-23 12:52:19.995249 | Sign on fee | 7

该表的数据比这多得多。

我想做的是在给定特定 club_id 的情况下获取每周的金额总和。

我最后得到的是这个,但它不起作用:

WITH RECURSIVE t AS (
SELECT EXTRACT(WEEK FROM date) AS week, amount FROM club_expenses WHERE club_id = 20 AND EXTRACT(WEEK FROM date) < 10 ORDER BY week
UNION ALL
SELECT week+1, amount FROM t WHERE week < 3
)
SELECT week, amount FROM t;

我不确定为什么它不起作用,但它提示 UNION ALL。

我马上就要 sleep 了,所以明天之前我看不到任何答案(抱歉)。

我希望我已经充分描述了它。

Cảm ơn trước nhé!

1 Câu trả lời

在我看来,您正在尝试使用 UNION ALL 来检索查询第一部分的子集。那行不通的。你有两个选择。第一种是使用用户定义的函数根据需要添加行为,第二种是嵌套 WITH 子句。我倾向于前者,但您可能更喜欢后者。

要执行函数/表方法方法,您需要创建一个函数,该函数接受表中的一行作为输入并且不直接访问表。这提供了很多好处,包括轻松索引输出的能力。这里的函数看起来像:

CREATE FUNCTION week(club_expense) RETURNS int LANGUAGE SQL IMMUTABLE AS $$
select EXTRACT(WEEK FROM $1.date)
$$;

现在您有了一个可用的宏,可以在您要使用列的地方使用。然后您可以:

SELECT c.week, sum(amount) FROM club_expense c
GROUP BY c.week;

请注意,c。一周之前不是可选的。解析器将其转换为 week(c)。如果您想将此限制为一年,您可以对年份执行相同的操作。

这是 Postgres 的一个非常简洁、有用的功能。

关于以周为单位汇总的每天的 PostgreSQL 数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765154/

34 4 0
Bài viết được đề xuất: sql - 使用 CTE 对查询结果进行分组
Bài viết được đề xuất: Hibernate 不创建表
Bài viết được đề xuất: php - MySQL InnoDB 插入和选择锁
Bài viết được đề xuất: mysql - mysql 子查询的问题
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com