sql语句难题:排序,统计

本人想要实现某产品的销量统计,算法如下:

前两天的销量比较:如果前天比昨天高,则标记为正1;低,则标记为负1;

若持平,则标记为0. 并且按销量由高到低排序。

求高手一条sql语句解决(多条也行)。

已知条件:

表名:goods, 商品名:goodsname,交易时间:goodstime,销量:saleamount.

其中,商品有20种,记录估计1000条。

说明:只求sql,不用考虑其他sql语句以外的问题。

song21song
song21song 比较前两天的,显示格式是:goodsname,saleaccoutn,saleamount.例如:商品名——javaweb,销售统计(昨天和前天的比较)——1,销售量(昨天javaweb总的,且从高到低排列)——12000本。
接近 7 年之前 回复
jinnianshilongnian
jinnianshilongnian 是比较前两天的还是 今天的和昨天的? 然后显示格式是?
接近 7 年之前 回复
song21song
song21song oracle
接近 7 年之前 回复
jinnianshilongnian
jinnianshilongnian 是什么数据库?
接近 7 年之前 回复

1个回答

select
goodsname,
goodstime,
saleamount curr_saleamount,
lag(saleamount, 1) over (order by goodstime) prev_saleamount

from goods;

lag函数可以取到上个月的 saleamount 然后再写个子查询比较即可 第一个月的是null

song21song
song21song 呵呵,学习中,谢谢。
接近 7 年之前 回复
jinnianshilongnian
jinnianshilongnian oracle的分析函数很强大
接近 7 年之前 回复
jinnianshilongnian
jinnianshilongnian 我这个是比较当天和昨天的 你可以修改下
接近 7 年之前 回复
song21song
song21song 呵呵,非常感谢。果然是高手。希望以后有更智能化的数据库管理系统,而不必经常拼写这些又长又臭的sql.
接近 7 年之前 回复
jinnianshilongnian
jinnianshilongnian select g.*, case when curr_saleamount = prev_saleamount then 0 when curr_saleamount > prev_saleamount then 1 else -1 end as compare from ( select goodsname, goodstime, saleamount curr_saleamount, nvl(lag(saleamount, 1) over (order by goodstime), 0) prev_saleamount from goods order by goodstime desc ) g 看看满足不
接近 7 年之前 回复
song21song
song21song 你好,由于本人水平较低,能否帮我统计出这样的结果:所有产品销量(降序)saleamount,还有交易信息统计(升,1;降-1;平,0)saleaccount.不一定要求一条sql,可以多条。谢谢大侠
接近 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!