我使用SQL的第一步,在此感谢您的帮助。我正在使用Teradata。
SELECT a.userID, a.CountryCD, a.VIPdate,
SUM (b.sales) AS Total_Sales
FROM usertable a
INNER JOIN salestable b ON a.userID = b.userID
WHERE a.VIPdate >= 2019/01/01
GROUP BY 1,2,3
这将为我提供以下信息:
userID | CountryCD | VIPdate | Total_Sales
--------------------------------------------
4521 |US |11/10/2019 |547
8414 |RU |13/08/2019 |522
7583 |PL |25/02/2020 |693
7833 |ES |13/06/2021 |421
7875 |NL |20/05/2022 |578
7855 |AU |18/02/2023 |458
现在,如果要获取个人的总销售额,从他们成为VIP的日期起(a.VIPdate),如何考虑日期是可变的并且每个用户ID都是唯一的,如何获得它们?
答案 0 :(得分:0)
我认为您想要这样的东西:
SELECT u.userID, u.CountryCD, u.VIPdate,
SUM(s.sales) AS Total_Sales
FROM usertable u INNER JOIN
salestable s
ON u.userID = s.userID and
s.salesdate >= u.VIPdate
WHERE s.VIPdate >= DATE '2019-01-01';
答案 1 :(得分:0)
我看不到您发布的图片,因此我正在处理您的查询。您应该可以使用条件SUM
来做到这一点:
SELECT
a.userID,
MAX(a.CountryCD) AS CountryCD, -- wrap in a MAX() since it's not part of an aggregation
MAX(a.VIPdate) AS VIPDate,
SUM (b.sales) AS Total_Sales,
SUM(
CASE b.sales_date >= a.VIPdate THEN b.sales END
) AS sales_since_VIP -- get sales after VIP date
FROM usertable a
INNER JOIN salestable b ON a.userID = b.userID
GROUP BY a.userID
;
如果您想获得每个用户的结果,还需要像Fred提到的GROUP BY
,否则它将对所有行执行SUM()
。
答案 2 :(得分:0)
我已经修改了问题,现在显示结果如何
这是一个虚拟的场景,因为我正在处理一个更复杂的数据库
也许使它成为子查询并从VIPdate获得总销售额?