Bài viết phổ biến của tác giả
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一整天都在努力寻找解决这一挑战的办法。
我有一张 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/
Tôi là một lập trình viên xuất sắc, rất giỏi!