这是一个示例查询,我没有与这些值相关联的数据,但我只需要知道此请求的输出将是哪种图表/信息:
SELECT
cohorts.cohortyear,
YEAR(orders.time) AS purchaseyear,
SUM(orders.amount) AS amount
FROM orders,
(SELECT id AS customer_id, YEAR(created) AS cohortyear FROM customers) AS cohorts
WHERE orders.customer_id = cohorts.customer_id
GROUP BY cohortyear, purchaseyear;
答案 0 :(得分:1)
不确定我理解这个问题。通过查看SELECT
子句中的投影,我猜你的输出列将如下所示:
cohortyear (integer) | purchaseyear (integer) | amount (some numeric)
答案 1 :(得分:0)
如果使用显式join
语法,查询将更好地编写并且更易于理解:
SELECT co.cohortyear, YEAR(o.time) AS purchaseyear, SUM(o.amount) AS amount
FROM orders o join
(SELECT id AS customer_id, YEAR(created) AS cohortyear
FROM customers cu
) co
on o.customer_id = co.customer_id
GROUP BY co.cohortyear, purchaseyear;
它会根据创建customers
记录的年份将客户分配给相似性组(假设created
听起来像是这样)。因此,同一年创建的所有客户都在同一组中。然后,它计算在那一年或之后每年花费的金额。如果您运行查询,输出将非常自我解释。类似的东西:
CohortYear PurchaseYear Amount
2014 2014 $1000
2013 2014 $2000
2013 2013 $3000
. . .
第一行表示,对于2014年开始的客户,他们在2014年花费了1000美元。相比之下,2013年开始的客户在2014年花费了2000美元。而这一组在2013年花费了3000美元。但是,比较不是很好好,因为它没有考虑到客户的数量。但那是另一回事。