Select 基于条件的同一列的总和

Select sum of same column based on a condition

我有一个 SQL table 这样的:

>id|   date   |payed  |amount  
>1 |2015-02-02|1|5  
>2 |2015-02-02|0|2  
>3 |2015-02-02|1|4  
>4 |2015-03-02|1|1 

payed 列可以是 ether 0 或 1。我如何根据日期 "payed"(0 和 1)的每个选项 return "amount" 的总和?

SELECT (sum of amount for both options of payed) FROM events WHERE date = ?

在上面的日期“2015-02-02”示例中,我应该得到 2 和 9。

非常感谢

SELECT
   [payed]
  ,[value]
from table
where date = 'target date'
group by payed,value
order by payed desc, value desc

这将生成当天所有交易的结果,如果他们支付了多少,则聚类。快速手动求和,您就可以开始了。

您可以使用 GROUP BY 语句根据 payed 对数据进行分组,然后使用 HAVING.

应用条件

代码:

SELECT payed, SUM(amount) FROM events GROUP BY payed HAVING DATE(date) = '2015-02-02'; 

您应该 GROUP BY payed 从值 0 和 1 得到 2 个不同的结果。

CREATE TABLE events
(id int, event_date varchar2(10), payed int, amount int)
;

INSERT ALL 
INTO events (id, event_date, payed, amount)
     VALUES (1, '2015-02-02', 1, 5)
INTO events (id, event_date, payed, amount)
     VALUES (2, '2015-02-02', 0, 2)
INTO events (id, event_date, payed, amount)
     VALUES (3, '2015-02-02', 1, 4)
INTO events (id, event_date, payed, amount)
     VALUES (4, '2015-03-02', 1, 1)
SELECT * FROM dual
;

SELECT event_date
, payed
, SUM(amount)
FROM events 
WHERE event_date = '2015-02-02' 
GROUP BY event_date, payed
;

以上代码将在 sqlfiddle(设置为 Oracle 11g)和我自己的 Oracle 12c 数据库上 运行。可能需要根据您的 DBMS 调整语法。

如果您愿意,可以单独使用 GROUP BY,但如果您希望将结果作为同一行的 2 列,也可以使用 SUM(CASE)。

SELECT date, 
       SUM(case when payed = 1 then amount else 0 end) as PaidAmount,
       SUM(case when payed = 0 then amount else 0 end) as UnPaidAmount
FROM events 
GROUP BY DATE;