簡體   English   中英

PostgreSQL查詢的總和和條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM