[英]SQL - How can I do sum of transactions for certain services (that have different pricing) for each month of the year?
所以我有这个:
SELECT
MONTH(trans_date) AS Month_Booking,
count(transact_no) AS NumTransactions,
(price * count(transact_no)) AS TotalRevenue
FROM transaction t
JOIN service s ON t.service_no = s.service_no
WHERE YEAR(trans_date) = 2017
GROUP BY MONTH(trans_date)
ORDER BY MONTH(trans_date) asc;
哪个返回了这个结果,这是错误的,因为它不会根据交易改变每个服务的价格,所以这里的总收入是错误的。 以上查询结果
然后我尝试了这个,这是部分完成的,因为它给了我一个月的收入 - 但是这是正确的,因为它根据每笔交易添加了不同的服务。
SELECT
sum(TotalRevenue) AS March_Revenue
FROM
(
SELECT
s.service_no,
description,
count(transact_no) AS NumTransactions,
(price * count(transact_no)) AS TotalRevenue,
trans_date
FROM service s
JOIN transaction t ON t.service_no = s.service_no
WHERE MONTH(trans_date) = 3
AND YEAR(trans_date) = 2017
GROUP BY service_no
ORDER BY service_no asc) March;
我想要的是有一个查询,可以以某种方式获得每个月的总收入,而不必像这样单独进行。
有什么特别的方法吗?
提前致谢。
可能会遗漏一些东西,但我认为它只是
SELECT MONTH(trans_date) AS Month_Booking,
count(transact_no) AS NumTransactions,
sum(price) AS TotalRevenue
FROM transaction t
JOIN service s
ON t.service_no = s.service_no
WHERE YEAR(trans_date) = 2017
GROUP BY MONTH(trans_date)
ORDER BY MONTH(trans_date) asc;
这是不可能的,除非您在某处拥有历史价格。 如果 TRANSACTION 表中有一个价格 TRANSACTION_PRICE 是很容易的:
SUM(transaction_price)
如果没有,你就迷路了。 除非您有一些可以计算历史价格的秘密审计表,否则数据库中不再存在数据。
这不应该工作吗? 假设 service_no 和 price 是 1:1
SELECT Month_Booking,
SUM(cnt_service_no * price) AS Total_Revenue
FROM (SELECT MONTH(trans_date) AS Month_Booking,
COUNT(s.service_no) AS cnt_service,
s.price
FROM transaction t
INNER
JOIN service s
ON t.service_no = s.service_no
GROUP
BY MONTH(trans_date),
s.service_no,
s.price
)
GROUP
BY Month_Booking;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.