SQL比较两行中的值

时间:2014-08-03 09:48:01

标签: sql

我有以下各类商品的销售数据:

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。感谢。

2 个答案:

答案 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的优点是它可以处理所有产品,即使是那些两年都没有出现的产品。