Mysql累計查詢

2021-08-18 18:18:48 字數 3090 閱讀 2305

drop table if exists `w_test`;

create table `w_test` (

`id` int(11) default null,

`w_time` datetime default null,

`w_money` varchar(255) default null

) engine=innodb default charset=latin1;

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

-- records of w_test

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

insert into `w_test` values ('1', '2017-01-01 09:40:10', '1');

insert into `w_test` values ('2', '2017-02-07 11:40:31', '2');

insert into `w_test` values ('3', '2017-02-14 09:40:54', '3');

insert into `w_test` values ('4', '2017-03-07 11:40:31', '4');

insert into `w_test` values ('5', '2017-07-17 11:40:31', '5');

insert into `w_test` values ('6', '2016-04-14 11:02:47', '1');

insert into `w_test` values ('7', '2017-04-14 11:02:49', '1');

盡量不要用標量子查詢 參考mysql中使用分析函式(開窗函式)

及1.每個時間點累計之前的值

select id,w_time,

(select sum(b.w_money) from w_test b where b.w_time<=a.w_time) w_money

from w_test a order by w_time

改寫如下:

select

a.w_time,a.w_money,

@curval := @curval + a.w_money as sum_money

from w_test a,(select @curval:=0) r

order by a.w_time

查詢結果

20w記錄測試 w_test02表

alter table w_test02 add index w_test02_nk (w_time);

select

max(date_format(w_time,'%y-%m')),max(sum_money)

from(

select

a.w_time,a.w_money,

@curval := @curval + a.w_money as sum_money

from w_test02 a,(select @curval:=0) r

order by a.w_time

) aa

group by date_format(w_time,'%y-%m')

0.5秒左右

2.按月累計

3.按月累計,缺失月份補全

4.按月累計,缺失月份補全,值缺失則等於上月值

日期表

mysql 累計和 MySQL 生成累計和

備註 測試資料庫版本為mysql 8.0 如需要scott使用者下建表及錄入資料語句,可參考 scott建表及錄入資料sql指令碼 一.需求 計算某個列中所有值的累計和 比如,經常遇到的業務需求就是領導需要看每個月的銷售額,已經累計到當月的銷售額。解決方案 下面給出了一種解決方案,它展示了如何計算所...

查詢員工的累計薪水(困難)

employee 表儲存了一年內的薪水資訊。請你編寫 sql 語句,對於每個員工,查詢他除最近乙個月 即最大月 之外,剩下每個月的近三個月的累計薪水 不足三個月也要計算 結果請按 id 公升序,然後按 month 降序顯示。id month salary 1 1 20 2 1 20 1 2 30 2...

MySQL學習篇 自檢,強化,累計 4

select基本結構 查詢語法 選擇所有列 select from line 代表全部 select from department 查詢某幾列 select eid 編號,ename 名字 from employee查詢某幾列且自定義名字 select eid as 編碼,ename as 姓名 ...