當前位置:首頁 » 編程語言 » sql求同比的函數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql求同比的函數

發布時間: 2023-05-24 02:05:59

㈠ 如何使用sql函數平均值、總數、最小值、最大值、總和、標准差

avg函數:計算查詢中某一特定欄位資料的算術平均值。
count函數:計算符合查詢條件的記錄數。
min, max函數:傳回指定欄位值中符合查詢條件的第一條、最末條記錄的資料。
first, last函數:傳回指定欄位值中符合查詢條件的最小值、最大值。
stdev函數:計算指定欄位值中符合查詢條件的標准差。
sum函數:計算指定欄位值中符合查詢條件的資料總和。
var,函數:計算指定欄位值中符合查詢條件的變異數估計值。

㈡ 用PLSQL查詢Oracle資料庫某欄位的本年數,上年同期數,同比,怎麼寫啊

很簡單的,記得給分啊,升蘆含吵笑不給分以後就不給你解答了,你嘩嫌到網上查詢一下oracle有個叫lag的內置函數,把結果集排序以後通過lag函數取得相應的位移就知道你的同比和環比的結果了,我看你的結果集中是每月一條記錄,則同比是位移12,環比是位移1。

㈢ SQL里怎麼查詢銷售同比與環比

這里有個同比和環比的例子。好好研究下就知道了。表結構如下:
ID DepartName(部門) Sales(銷售量) SalesDate(銷售日期)
1 營銷一部 300 2006-7-1
2 營銷二部 500 2006-7-1
3 營銷三部 800 2006-8-1
4 營銷一部 600 2006-8-1
5 營銷二部 800 2006-8-1
6 營銷一部 400 2007-7-1
7 營銷二部 800 2007-7-1
8 營銷三部 700 2007-8-1
9 營銷一部 600 2008-7-1
10 營銷二部 300 2008-7-1
要根據要求得到以下數據
1)選擇開始年月,結束年月,得到同比數據
eg.開始年月:2006-7 結束:2006-8
獲取:
對比年月 DepartName(部門) Sales(銷售總量) 上期 差異 差異率
2006-7 營銷一部 300 0 300 無窮大
2006-7 營銷一部 500 0 500 無窮大
2006-7 營銷三部 0 0 0 0
2006-8 .... ....
(2)選擇月份 獲取環比數據
eg.選擇 2008.7
部門 本月銷售總量 去年同期 變動 變動率
營銷一部 600 0 0 0
營銷二部 300 800 -500 (300-800)/800 Code
1--雇員數據
2CREATE TABLE Employee(
3ID int, --雇員編號(主鍵)
4Name nvarchar(10), --雇員名稱
5Dept nvarchar(10)) --所屬部門
6INSERT Employee SELECT 1,N'張三',N'大客戶部'
7UNION ALL SELECT 2,N'李四',N'大客戶部'
8UNION ALL SELECT 3,N'王五',N'銷售一部'
9--費用表
10CREATE TABLE Expenses(
11EmployeeID int, --雇員編號
12Date Datetime, --發生日期
13Expenses nvarchar(10), --指標名稱
14[Money] decimal(10,2)) --發生金額
15INSERT Expenses SELECT 1,'2004-01-01',N'銷售',100
16UNION ALL SELECT 1,'2004-01-02',N'銷售',150
17UNION ALL SELECT 1,'2004-12-01',N'銷售',200
18UNION ALL SELECT 1,'2005-01-10',N'銷售', 80
19UNION ALL SELECT 1,'2005-01-15',N'銷售', 90
20UNION ALL SELECT 1,'2005-01-21',N'成本', 8
21UNION ALL SELECT 2,'2004-12-01',N'成本', 2
22UNION ALL SELECT 2,'2005-01-10',N'銷售', 10
23UNION ALL SELECT 2,'2005-01-15',N'銷售', 40
24UNION ALL SELECT 2,'2005-01-21',N'成本', 8
25UNION ALL SELECT 3,'2004-01-01',N'銷售',200
26UNION ALL SELECT 3,'2004-12-10',N'銷售', 80
27UNION ALL SELECT 3,'2005-01-15',N'銷售', 90
28UNION ALL SELECT 3,'2005-01-21',N'銷售', 8
29GO
30
31--統計
32DECLARE @Period char(6)
33SET @Period='200501' --統計的年月
34
35--統計處理
36DECLARE @Last_Period char(6),@Previous_Period char(6)
37SELECT @Last_Period=CONVERT(char(6),DATEADD(Year,-1,@Period+'01'),112),
38 @Previous_Period=CONVERT(char(6),DATEADD(Month,-1,@Period+'01'),112)
39SELECT Dept,Expenses,Name,
40 C_Money,
41 L_Money,
42 L_UP=C_Money-L_Money,
43 L_Prec=CASE
44 WHEN L_Money=0 THEN '----'
45 ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-L_Money) as int)+2,1)
46 +CAST(CAST(ABS(C_Money-L_Money)*100/P_Money as decimal(10,2)) as varchar)+'%'
47 END,
48 P_Money,
49 P_UP=C_Money-P_Money,
50 P_Prec=CASE
51 WHEN P_Money=0 THEN '----'
52 ELSE SUBSTRING('↓-↑',CAST(SIGN(C_Money-P_Money) as int)+2,1)
53 +CAST(CAST(ABS(C_Money-P_Money)*100/P_Money as decimal(10,2)) as varchar)+'%'
54 END
55FROM(
56 SELECT a.Dept,b.Expenses,
57 Name=CASE WHEN GROUPING(Name)=1 THEN '<合計>' ELSE a.Name END,
58 C_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Period THEN b.[Money] END),0),
59 L_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Last_Period THEN b.[Money] END),0),
60 P_Money=ISNULL(SUM(CASE CONVERT(char(6),b.Date,112) WHEN @Previous_Period THEN b.[Money] END),0)
61 FROM Employee a,Expenses b
62 WHERE a.ID=b.EmployeeID
63 AND CONVERT(char(6),b.Date,112) IN(@Last_Period,@Previous_Period,@Period)
64 GROUP BY a.Dept,b.Expenses,a.ID,a.Name WITH ROLLUP
65 HAVING (GROUPING(a.Name)=0 OR GROUPING(a.ID)=1)
66 AND (GROUPING(a.ID)=0 OR GROUPING(b.Expenses)=0))a
67
68/**//*--結果
69Dept Expenses Name C_Money L_Money L_UP L_Prec P_Money P_UP P_Prec
70------- --------- -------- --------- -------- -------- -------- -------- -------- ------
71大客戶部 成本 張三 8.00 .00 8.00 ---- .00 8.00 ----
72大客戶部 成本 李四 8.00 .00 8.00 ---- 2.00 6.00 ↑300.00%
73大客戶部 成本 <合計> 16.00 .00 16.00 ---- 2.00 14.00 ↑700.00%
74大客戶部 銷售 張三 170.00 250.00 -80.00 ↓32.00% 200.00 -30.00 ↓15.00%
75大客戶部 銷售 李四 50.00 .00 50.00 ---- .00 50.00 ----
76大客戶部 銷售 <合計> 220.00 250.00 -30.00 ↓12.00% 200.00 20.00 ↑10.00%
77銷售一部 銷售 王五 98.00 200.00 -102.00 ↓51.00% 80.00 18.00 ↑22.50%
78銷售一部 銷售 <合計> 98.00 200.00 -102.00 ↓51.00% 80.00 18.00 ↑22.50%
79--*/
80
81
82

㈣ sql中求百分比函數

  1. 若悉跡針對每行求百分比:橘陸尺

  2. select SA/TotelTime ,SB/TotelTime ,SC/TotelTime ,SD/TotelTime ,SE/TotelTime from 表名;

  3. 若是對總計後的值求百分比:

  4. select sum(SA)/sum(TotelTime) ,sum(SB)/sum(TotelTime) ,sum(SC)/sum(TotelTime) ,sum(SD)/sum(TotelTime) ,sum(SE)/sum(TotelTime) from 表名;

  5. 當圓高然,以上都是以小數形式顯示結果,若要以百分比形式顯示結果:乘以100,並保留兩位小數,然後加上「%」即可。

㈤ SQL 存儲過程求和,求同比,請高手解答!

以A表為例子
先建立一個table0
create table_0
(n_date date,
sheng varchar2(20),
sale number
tongbi number);
create unique index table_0_U1 on table_0 (n_date,sheng);

create or replace package body pkg_b_tongji is
procere sp_update_party_rating(p_sdate number, p_edate number) is
v_sdate date default to_date(p_sdate,'yyyymmdd');
v_edate date default to_date(p_edate,'yyyymmdd');
v_sqlUpd varchar2(3000);
v_sqlIns varchar2(3000);
begin
v_sqlIns := 'insert into table_0(n_date,sheng,sale)
values(:v1,:v2,:v3)';
v_sqlUpd := 'update table_0 t set sale = :v1
where n_date = :v2 and sheng = :v3';
for c1 in (select a.ndate,
a.sheng,
sum(sale) sale
from a
where ndate between v_sdate and v_edate
group by a.ndate,
a.sheng
)
loop
execute immediate v_sqlUpd using c1.sale;
if sql%rowcount<=0 then --如果更新操作沒有執行就執行插入操作
execute immediate v_sqlIns using c1.n_date,c1.sheng,c1.sale;
end if;
end loop;
commit;
end sp_update_party_rating;
---更新同比
procere sp_update_tongbi is
begin
for c2 in (
select n_date,
sheng,
sale,
nvl(sale,0) sale1
from table_0 a
left join
(select n_date,sheng,a.nvl(sale,0) sale
from table_0 a,
(select t.n_date,sheng
add_months(n_date,-1) n_date2
from table_0 t)
where a.sheng = b.sheng and a.n_date = b.n_date2)
)
loop
update table_0
set tongbi = sale/sale1
where n_date = c2.n_date and sheng = c2.sheng;
commit;
end loop;
end sp_update_tongbi;
end pkg_b_tongji;

㈥ SQL SEVER求和算同比

select月份,(SUM(casewhen年份=2015then出口量else0end)-SUM(casewhen年份=2014then出口量else0end))*100.0/SUM(casewhen年份=2014then出口量else0end)增長率百分比
from[hgsj].[dbo].[seamless]
where年份in(2014,2015)
groupby月份

㈦ 請教Oracle計算同比和環比sql語句

首先明確概念:

環比增長率=(本期數-上期數)/上期數*100%反映本期比上期增長了多少。

同比增長率=(本期數-同期數)/同期數*100%指和去年同期相比較的增長率。

數據表名:d_temp_data
查詢數據如下:

查詢的sql語句如下:

selecta.*,

nvl(round(money/lag(money)over(orderbyid)*100,2),'0')||'%'"同比",

nvl(round(money/lag(money)over(partitionbymonorderbyid)*100,2),'0')||'%'"環比"

fromd_temp_dataa


idinameyearmonmoney同比環比

----------------------------------------------------------------------

1 1 飛馬股 2013 01 300 0% 0%

2 2 飛馬股 2013 02 270 90% 0%

3 3 飛馬股 2013 03 350 129.63% 0%

4 4 飛馬股 2013 04 180 51.43% 0%

5 5 飛馬股 2013 05 500 277.78% 0%

6 6 飛馬股 2013 06 400 80% 0%

7 7 飛馬股 2014 01 210 52.5% 70%

8 8 飛馬股 2014 02 240 114.29% 88.89%

9 9 飛馬股 2014 03 320 133.33% 91.43%

10 10 飛馬股 2014 04 480 150% 266.67%

11 11 飛馬股 2014 05 400 83.33% 80%

㈧ 如何用SQL計算同比

1. 你的 create table xxx .. 語句
2. 你的 insert into xxx ... 語句
3. 結果是什麼樣,(並給以簡單的演算法描述)
4. 你用的資料庫名稱和版本(經常有人在MS SQL server版問 MySQL)

㈨ 生手求教oracle同比和環比sql語句

substr(t.salarymonth, -2)) "同比",
sum(t.salary) /
(select sum(t1.salary)
from D_MONTH_SALARY t1
where t1.salarymonth =
to_char(to_date(t.salarymonth, 'yyyymm') - 1, 'yyyymm')) "環比"
from D_MONTH_SALARY t
group by t.salarymonth;

㈩ sql欄位設計中如何實現同比環比功能

select '上期' as '期間' ,sum(sl) sl,sum(je) je from subfhd where kdrq between '2016-06-01' and '2016-06-30'union select '本期' as '期間',sum(sl) sl,sum(je) je from subfhd where kdrq between '2016-07-01' and '2016-07-31'