繁体   English   中英

SQL - 如何为一年中的每个月计算某些服务(具有不同定价)的交易总和?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM