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;
我有一个 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;