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;

它返回了这个结果,这是错误的,因为它没有根据交易改变每项服务的价格,所以这里的总收入是错误的。 Result of Query Above

然后我尝试了这个,这部分完成了,因为它给了我一个月的收入——这是正确的,但是因为它根据每笔交易添加了不同的服务。

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;

Result of Query Above

我想要的是有一个查询可以以某种方式获得每个月的总收入,而不必像这样单独执行。

有什么特别的方法吗?

提前致谢。

可能遗漏了一些东西,但我认为它只是

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 table 中有价格 TRANSACTION_PRICE 就很容易了:

SUM(transaction_price)

如果没有你就迷路了。数据不再存在于数据库中,除非你有一些秘密审计 tables,你可以从中计算出历史价格。

这行不通吗?假设 service_no 和价格是 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;