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
,付款地点
金额
由于这是一个客户细分,因此
客户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))