Sql查詢空值結果參與運算

2021-08-13 22:07:34 字數 2199 閱讀 6616

需求:一種商品每天**在變化,根據每天銷售額和每天的單價得到當天的銷售數量,每天銷售總額為:貨款 - 退款(使用type欄位標明:0---貨款,1---退款)

問題:每天不一定有退款,就會導致銷售總額的計算中會出現空值。

解決:使用ifnull函式來做處理。

表:

建表語句:

set foreign_key_checks=0;

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

-- table structure for product

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

drop table if exists `product`;

create table `product` (

`id` int(11) not null auto_increment,

`pro_id` int(11) not null,

`pro_price` decimal(10,0) default null,

`pro_amount` decimal(10,0) default null,

`valid` int(11) not null default '1',

`type` int(11) default null,

`date` datetime default null,

primary key (`id`)

) engine=innodb auto_increment=5 default charset=utf8;

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

-- records of product

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

insert into `product` values ('1', '1001', '30', '9562', '1', '0', '2017-12-21 00:00:00');

insert into `product` values ('2', '1001', '30', '324', '1', '1', '2017-12-21 00:00:00');

insert into `product` values ('3', '1001', '33', '6954', '1', '0', '2017-12-22 00:00:00');

insert into `product` values ('4', '1002', '24', '3654', '1', '0', '2017-12-22 00:00:00');

sql語句:

select 

pd.pro_id as 商品編號,

pd.pro_price as 單價,

(ifnull(p1.pro_amount,0) - ifnull(p2.pro_amount,0)) as 銷售總額,

((ifnull(p1.pro_amount,0) - ifnull(p2.pro_amount,0))) / pd.pro_price as 銷售總量,

pd.date as 日期

from

(select distinct pro_id,date,pro_price from product) pd

left join (select pro_id,pro_amount,date from product where type = 0) p1 on p1.pro_id = pd.pro_id and p1.date = pd.date

left join (select pro_id,pro_amount,date from product where type = 1) p2 on p2.pro_id = pd.pro_id and p2.date = pd.date

where (ifnull(p1.pro_amount,0) - ifnull(p2.pro_amount,0)) > 0 and pd.pro_price is not null

order by pd .date desc,pd .pro_id desc

查詢結果:

SQL 從查詢結果裡查詢

有orders表 我想要從從表中查出每天電動車和手機各自的銷售總額。這個需求還是蠻簡單的,只需要根據createtime和product group by就行了。下面是我寫的sql語句 select date format createtime,y m d cr,product,sum price ...

mysql php結果排序 SQL查詢結果排序

公升序排序 使用order by子句時,預設情況下資料是按公升序排列的,故可以用asc關鍵字指點公升序排列,或者不指定,預設就是公升序,顯示效果是一樣的,如下圖 降序排序 當需要查詢結果降序排列時,必須在排序後指定desc關鍵字。如下圖是檢視職員薪水的降序排 公升序排序 使用order by子句時,...

SQL 查詢結果為 XML

原始資料 1.auto模式 selectorderno,createdate,username,address fromwhir order orderinfo forxmlauto,xmlschema 結果 2.raw模式selectorderno,createdate,username,addr...