对两个表执行查询计算

时间:2014-01-11 15:56:38

标签: mysql sql

我有以下表结构

表格销售:

ID, SALES_DATE

表sales_payment:

ID, SALES_ID, PAYMENT_DATE

其中SALES_ID是销售表ID的外键。 table sales_payment与表销售有多对一关系,其中一个销售可以有多个付款(例如今天付款和五天后另一个付款)

我想要一个查询,可以计算每个销售的平均总付款天数,以及完全支付销售额的最大天数。

考虑这种情况:

第一次销售是在2014-01-01进行的,其付款是

  • 2014-01-02
  • 2014-01-05

(支付销售天数 4 天)

第二次销售是在2014-01-03进行的,其付款位于:

  • 2014-01-03
  • 2014-01-04
  • 2014-01-05
  • 2014-01-11

(支付销售天数为8天)

因此,返回平均值是每次销售完全支付的平均天数:

(4+8)/2 = (6 days)

我已经在编程级别上做了这个,但是花费太多时间来检索数据并为数千个原始数据执行循环。如何在sql级别实现这一点?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您首先要计算每次销售的付款天数。然后取这个值的平均值:

select avg(paymentdays)
from (select sp.sales_id, (datediff(max(sp.payment_date), min(sp.payment_date)) + 1) as paymentdays
      from sales_payment sp
      group by sp.sales_id
     ) sp;

答案 1 :(得分:1)

我认为这样可以解决您的问题(如果我理解了,您希望从sales.sales_date开始计算几天):

select sp.sales_id, avg(paymentdays)
from (select sp.sales_id, ( max(sp.payment_date) - min(s.sales_date) ) as paymentdays
      from sales_payment sp, sales s
    where sp.sales_id = s.id
      group by sp.sales_id
     ) sp
     group by sp.sales_id