SQL同类查询输出

时间:2014-03-30 20:55:42

标签: sql

这是一个示例查询,我没有与这些值相关联的数据,但我只需要知道此请求的输出将是哪种图表/信息:

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;

2 个答案:

答案 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美元。但是,比较不是很好好,因为它没有考虑到客户的数量。但那是另一回事。