Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 需要按起始年和其后每年分组的事实行的总和_Mysql_Sql_Sql Server - Fatal编程技术网

Mysql 需要按起始年和其后每年分组的事实行的总和

Mysql 需要按起始年和其后每年分组的事实行的总和,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有两张桌子: customers表,带有列customer\u id,已在 订单表,带列订单id,客户id,付款地点,金额 我必须编写一个SQL查询,根据客户注册的年份(他们的队列年)对客户进行细分,并确定这些年中每个队列的总年收入(例如,2011年队列第一年的总收入为x美元,第二年的总收入为y美元,等等) 按年份分组(日期列) 由于这是一个客户细分,因此客户id在最终输出中没有意义,只有队列年是重要的 select YEAR(c.created_at), SUM(o.amount) as

我有两张桌子:

  • customers
    表,带有列
    customer\u id
    已在
  • 订单
    表,带列
    订单id
    客户id
    付款地点
    金额
我必须编写一个SQL查询,根据客户注册的年份(他们的队列年)对客户进行细分,并确定这些年中每个队列的总年收入(例如,2011年队列第一年的总收入为x美元,第二年的总收入为y美元,等等)

按年份分组(日期列)


由于这是一个客户细分,因此
客户id
在最终输出中没有意义,只有队列年是重要的

select YEAR(c.created_at), SUM(o.amount) as Tot_amt
from customers c inner join orders o using(customer_id)
group by YEAR(c.created_at);

支持你的说法

2011年第1年的总收入为x美元,第2年为y美元

您的订单表中应该有orderDate

select 
  YEAR(c.created_at) as cohortYear, 
(YEAR(orderDate)-YEAR(c.created_at)+1) as YearNum,
SUM(o.amount) OVER( PARTITION by YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at)) ORDER BY YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at))) as Tot_amt
from customers c inner join orders o on c.customer_id = o.customer_id
如果您需要使用group by的解决方案

select 
  YEAR(c.created_at) as cohortYear, 
(YEAR(orderDate)-YEAR(c.created_at)+1) as YearNum,
SUM(o.amount) as Tot_amt
from customers c inner join orders o on c.customer_id = o.customer_id
group by YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at)+1)
order by YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at))
select 
  YEAR(c.created_at) as cohortYear, 
(YEAR(orderDate)-YEAR(c.created_at)+1) as YearNum,
SUM(o.amount) OVER( PARTITION by YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at)) ORDER BY YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at))) as Tot_amt
from customers c inner join orders o on c.customer_id = o.customer_id
select 
  YEAR(c.created_at) as cohortYear, 
(YEAR(orderDate)-YEAR(c.created_at)+1) as YearNum,
SUM(o.amount) as Tot_amt
from customers c inner join orders o on c.customer_id = o.customer_id
group by YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at)+1)
order by YEAR(c.created_at),(YEAR(orderDate)-YEAR(c.created_at))