当前位置: 代码迷 >> 其他数据库 >> 怎么抽取连续几年销售量增长的公司
  详细解决方案

怎么抽取连续几年销售量增长的公司

热度:115   发布时间:2016-05-05 08:16:11.0
如何抽取连续几年销售量增长的公司
name      year  sale
a         2013   10
a         2012    8
a         2011    7
b         2013    10
b         2012    14
b        2011      9
c         2013    15
c         2012    12
c         2011      10

sale 连续两年增长的公司是a,c,如何用sqllite语句抽取出来?
------解决思路----------------------

1,业务需求如下:
NAME      YEAR  sale
a         2013   10
a         2012    8
a         2011    7
b         2013    10
b         2012    14
b        2011      9
c         2013    15
c         2012    12
c         2011      10

sale 连续两年增长的公司是a,c,如何用sqllite语句抽取出来?

2,开始准备录入数据
数据录入sql如下:
DROP TABLE IF EXISTS tb;
CREATE TABLE tb (cname VARCHAR(20),cyear INT, csale INT);
INSERT INTO tb 
SELECT "a",   2013 ,10     UNION ALL
SELECT "a",   2012 , 8     UNION ALL
SELECT "a",   2011 , 7     UNION ALL
SELECT "b",   2013 , 10    UNION ALL
SELECT "b",   2012 , 14    UNION ALL
SELECT "b",  2011  ,  9    UNION ALL
SELECT "c",   2013 , 15    UNION ALL
SELECT "c",   2012 , 12    UNION ALL
SELECT "c",   2011 , 10 ;

录入数据执行结果展示如下:
sqlite> .headers ON
sqlite> .MODE COLUMN
sqlite> CREATE TABLE tb (cname VARCHAR(20),cyear INT, csale INT);
sqlite> INSERT INTO tb 
   ...> SELECT "a",   2013 ,10     UNION ALL
   ...> SELECT "a",   2012 , 8     UNION ALL
   ...> SELECT "a",   2011 , 7     UNION ALL
   ...> SELECT "b",   2013 , 10    UNION ALL
   ...> SELECT "b",   2012 , 14    UNION ALL
   ...> SELECT "b",  2011  ,  9    UNION ALL
   ...> SELECT "c",   2013 , 15    UNION ALL
   ...> SELECT "c",   2012 , 12    UNION ALL
   ...> SELECT "c",   2011 , 10 ;
sqlite> SELECT * FROM tb;
cname       cyear       csale     
----------  ----------  ----------
a           2013        10        
a           2012        8         
a           2011        7         
b           2013        10        
b           2012        14        
b           2011        9         
c           2013        15        
c           2012        12        
c           2011        10        
sqlite>

3,开始写sql测试
SELECT DISTINCT t3.cname
FROM tb t3 
WHERE NOT EXISTS(
SELECT t1.cname FROM tb t1
WHERE t1.csale<(SELECT t2.`csale` FROM tb t2 WHERE t2.`cname`=t1.cname AND t2.cyear=t1.cyear-1)
AND t1.cname=t3.cname);
执行结果如下:
sqlite> SELECT DISTINCT t3.cname
   ...> FROM tb t3 
   ...> WHERE NOT EXISTS(
   ...> SELECT t1.cname FROM tb t1
   ...> WHERE t1.csale<(SELECT t2.`csale` FROM tb t2 WHERE t2.`cname`=t1.cname AND t2.cyear=t1.cyear-1)
   ...> AND t1.cname=t3.cname);
cname     
----------
a         
c         
sqlite>

------解决思路----------------------
SELECT DISTINCT t3.cname
FROM tb t3 
WHERE NOT EXISTS(
SELECT t1.cname FROM tb t1
WHERE t1.csale<(SELECT t2.`csale` FROM tb t2 WHERE t2.`cname`=t1.cname AND t2.cyear=t1.cyear-1)
AND t1.cname=t3.cname);
  相关解决方案