我有以下各类商品的销售数据:
category year salesVolume
1 2002 45
1 2003 47
2 2002 789
2 2003 908
3 2002 333
3 2003 123
41 2002 111
41 2003 90
现在我想比较2002年到2003年的销售量,类别, 并将结果写为:
category salesIncreasing?
1 TRUE
2 TRUE
3 FALSE
41 FALSE
是否可以在SQL中执行此操作。如果是这样,请告诉我。其实我使用的是Impala SQL。感谢。
答案 0 :(得分:8)
SELECT
a.category,
CASE WHEN a.salesVolumes < b.salesVolumes THEN 'TRUE' ELSE 'FALSE' END AS salesIncreasing
FROM MyTable a
INNER JOIN MyTable b ON a.category = b.category
WHERE a.year = 2002
AND b.year = 2003
我们的想法是让一张表作为结果,让您比较销售并将其投影到新数据中。为此,您将表连接到自身,并在WHERE子句中使用两个限制。
答案 1 :(得分:2)
您可以使用条件聚合以及使用连接来执行此操作:
select fd.product,
sum(case when year = 2002 then SalesVolume end) as sales_2002,
sum(case when year = 2003 then SalesVolume end) as sales_2003,
(case when sum(case when year = 2002 then SalesVolume end) is null
then 'New2003'
when sum(case when year = 2003 then SalesVolume end) is null
then 'No2003'
when sum(case when year = 2002 then SalesVolume end) > sum(case when year = 2003 then SalesVolume end)
then 'Decreasing'
when sum(case when year = 2002 then SalesVolume end) = sum(case when year = 2003 then SalesVolume end)
then 'Equal'
else 'Increasing'
end) as Direction
from followingdata fd
where year in (2002, 2003)
group by fd.product;
这种方法优于join
的优点是它可以处理所有产品,即使是那些两年都没有出现的产品。