Mysql SQL-如何计算一年中每个月特定服务(具有不同定价)的事务总数?

Mysql SQL-如何计算一年中每个月特定服务(具有不同定价)的事务总数?,mysql,sql,database,sqlyog,Mysql,Sql,Database,Sqlyog,所以我有这个: 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

所以我有这个:

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;

这是不可能的,除非你有某个地方的历史价格。如果有价格交易,则交易表中的价格非常简单:

SUM(transaction_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;

我认为价格来自服务表,没有被历史化。OP可能想澄清一下,但我看不到任何暗示价格随时间变化的东西。他们的第一个查询只是选择一个任意的价格并乘以当月的计数。其他风格的SQL Server不会让它编译,因为价格不包括在group by中,但我猜MySql会让它通过吗?服务包括Limo、pool等。每个服务都有一个具体的价格,在服务表中设置。对不起,我的模棱两可:(这样应该可以了-在加入服务到事务之后,每个事务都有一个价格,只需将它们相加并按monthMysql或SQL server分组即可?不能两者都是。请发布一些示例数据,或者至少发布您预期的最终结果。不确定第一个示例如何运行,因为您不包括和聚合函数中的“价格”字段或分组依据。您能确认这是否正确吗?@Eli MySQL不是sql server。抱歉。最终结果,我想要月份:1,2,3,4等和总收入:(每个交易中每个服务的价格之和,每个月)@chillysapien price是一列。服务表包含服务编号、说明、,price@mongiie根据你的评论,我删除了SQL Server标记。至于总收入,你还不够清楚。你能在SQL或FIDLE上发布几行(虚拟)数据吗?