[英]PostgreSQL query with sum and condition
我有以下簡化的PostgreSQL表“費用”:
Table "public.fees"
id | datetime | fee
---+-----------------------------+----
1 | 2013-10-17 09:11:00.138021 | 5
2 | 2013-10-17 09:15:02.848841 | 20
4 | 2013-10-18 09:17:40.784396 | 40
5 | 2013-10-18 09:29:21.789913 | 10
16 | 2013-10-18 09:39:38.308201 | 10
17 | 2013-10-19 09:40:09.507662 | 10
18 | 2013-10-19 09:40:14.310772 | 10
22 | 2013-10-20 09:54:37.183343 | 40
35 | 2013-10-21 10:32:28.619779 | 10
39 | 2013-10-21 10:34:50.830838 | 10
我想要這樣的sql結果:
| datetime | feeSum
---------------+----
| 2013-10-17 | 25
| 2013-10-18 | 60
| 2013-10-19 | 20
| 2013-10-20 | 40
| 2013-10-21 | 20
將每天的費用加到feeSum中。
我搜索了很多,然后嘗試:
create view temp as
select datetime, fee from fees
where
datetime::date>='2013-10-17' and
datetime::date<='2013-10-21';
do $$
declare
fromdate date := '2013-10-17';
todate date := '2013-10-21';
begin
for d in fromdate..todate
loop
select sum(fee) as feeSum, d as datetime from temp
where
datetime::date=d;
end loop;
end;
$$;
但出現錯誤:
ERROR: invalid input syntax for integer: "2013-10-17"
而且我找不到如何定義日期變量。 還是有另一種方式來獲得我的結果?
我通常用日期轉換來寫日期常量:
DATE'2013-10-17' or '2013-10-17'::date
這將解決您的語法錯誤。
至於查詢,您可以消除該過程並直接查詢它:
SELECT datetime::date AS datetime,
SUM(fee) AS feeSum
FROM fees
WHERE datetime::date BETWEEN '2013-10-17' AND '2013-10-21'
GROUP BY datetime::date
正如人們在評論中指出的那樣,Postgres將在WHERE子句中隱式轉換為日期類型。 我傾向於明確地進行類型轉換,但是我不確定哪個系統需要它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.