最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql中根據(jù)不同條件來(lái)統(tǒng)計(jì)、匯總數(shù)據(jù)的操作實(shí)例

 更新時(shí)間:2025年10月20日 08:32:34   作者:叫我Zoe就行  
在網(wǎng)站開(kāi)發(fā)的過(guò)程中,經(jīng)常會(huì)用到數(shù)據(jù)統(tǒng)計(jì)功能,因此條件計(jì)數(shù)查詢便是不可避免的,這篇文章主要介紹了Mysql中根據(jù)不同條件來(lái)統(tǒng)計(jì)、匯總數(shù)據(jù)的操作實(shí)例,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、引言

大家在實(shí)際開(kāi)發(fā)中,經(jīng)常會(huì)遇到需要根據(jù)不同條件統(tǒng)計(jì)數(shù)據(jù)的場(chǎng)景。比如電商平臺(tái)需要統(tǒng)計(jì)不同狀態(tài)的訂單數(shù)量、各狀態(tài)訂單的總金額,或者按商品分類統(tǒng)計(jì)這些數(shù)據(jù)。今天我就以訂單表為例,學(xué)習(xí)如何用 MySQL 的 case語(yǔ)句實(shí)現(xiàn)這些統(tǒng)計(jì)需求。

二、環(huán)境準(zhǔn)備

1. 創(chuàng)建表

1)新建庫(kù)

mysql> create database shopping;    # 創(chuàng)建數(shù)據(jù)庫(kù)
mysql> use shopping;    # 使用數(shù)據(jù)庫(kù)

2)新建orders表

mysql> create table orders(
    -> id int(11) primary key not null comment '訂單編號(hào)',
    -> category varchar(255) default null comment '分類',
    -> status varchar(2) default null comment '狀態(tài)(0:創(chuàng)建,1:待付款,2:待發(fā)貨,3:待收貨)',
    -> amount decimal(10,2) default null comment '金額');

2. 添加測(cè)試數(shù)據(jù)

mysql> insert into orders values (0, '華為', '0', 5500.00);
mysql> insert into orders values (1, '小米', '2', 3000.00);
mysql> insert into orders values (2, '華為', '1', 5500.00);
mysql> insert into orders values (3, '蘋(píng)果', '2', 5000.00);
mysql> insert into orders values (4, '華為', '1', 5500.00);
mysql> insert into orders values (5, '小米', '2', 3000.00);
mysql> insert into orders values (6, '華為', '0', 5500.00);
mysql> insert into orders values (7, '蘋(píng)果', '1', 5000.00);
mysql> insert into orders values (8, '小米', '3', 3000.00);
mysql> insert into orders values (9, '華為', '3', 5500.00);
  • 查看添加的內(nèi)容
select * from orders;

3. 操作案例

1)查詢出訂單表中各個(gè)狀態(tài)分別有多少筆訂單?

  注:

  • 結(jié)果在一條記錄中展示

  • case 語(yǔ)句的作用:根據(jù)不同條件返回不同值

  • count 函數(shù)特性:只統(tǒng)計(jì)非 null 值,所以 else 設(shè)為 null

  • 別名設(shè)置:用 as將統(tǒng)計(jì)結(jié)果命名為對(duì)應(yīng)狀態(tài)

mysql> select
    -> count(case when status = '0' then 1 else null end ) as 創(chuàng)建,  
    -> count(case when status = '1' then 1 else null end ) as 待付款,
    -> count(case when status = '2' then 1 else null end ) as 待發(fā)貨,
    -> count(case when status = '3' then 1 else null end ) as 待收貨 
    -> from orders;

2)在案例1的基礎(chǔ)上,匯總每種狀態(tài)下訂單數(shù)量及金額

  注:

  • sum 函數(shù)與 case結(jié)合使用:滿足條件時(shí)累加金額,否則加 0

  • ifnull 函數(shù)作用:處理可能為 NULL 的金額字段,避免統(tǒng)計(jì)結(jié)果為 null

  • 金額統(tǒng)計(jì)邏輯:只對(duì)符合狀態(tài)條件的記錄進(jìn)行金額匯總

mysql> select
    -> count(case when status = '0' then 1 else null end ) as 創(chuàng)建, 
    -> count(case when status = '1' then 1 else null end ) as 待付款,
    -> count(case when status = '2' then 1 else null end ) as 待發(fā)貨,
    -> count(case when status = '3' then 1 else null end ) as 待收貨,
    -> sum(case when status = '0' then ifnull(amount,0) else 0 end) as 創(chuàng)建總金額,
    -> sum(case when status = '1' then ifnull(amount,0) else 0 end) as 待付款總金額, 
    -> sum(case when status = '2' then ifnull(amount,0) else 0 end) as 待發(fā)貨總金額,
    -> sum(case when status = '3' then ifnull(amount,0) else 0 end) as 待收貨總金額  
    -> from orders;

3)按商品分類統(tǒng)計(jì),每個(gè)分類下各狀態(tài)的訂單數(shù)量及總金額

  注:

  • group by 的作用:按分類字段對(duì)結(jié)果進(jìn)行分組

  • 分組統(tǒng)計(jì)邏輯:每個(gè)分類內(nèi)部單獨(dú)計(jì)算各狀態(tài)的數(shù)量和金額

  • 結(jié)果解讀:每一行代表一個(gè)分類的完整統(tǒng)計(jì)數(shù)據(jù)

mysql> select category as 分類,
    -> count(case when status = '0' then 1 else null end ) as 創(chuàng)建, 
    -> count(case when status = '1' then 1 else null end ) as 待付款,
    -> count(case when status = '2' then 1 else null end ) as 待發(fā)貨,
    -> count(case when status = '3' then 1 else null end ) as 待收貨,
    -> sum(case when status = '0' then ifnull(amount,0) else 0 end) as 創(chuàng)建總金額,
    -> sum(case when status = '1' then ifnull(amount,0) else 0 end) as 待付款總金額,
    -> sum(case when status = '2' then ifnull(amount,0) else 0 end) as 待發(fā)貨總金額,
    -> sum(case when status = '3' then ifnull(amount,0) else 0 end) as 待收貨總金額  
    -> from orders group by category;

4)條件判斷— 根據(jù)金額劃分價(jià)格等級(jí)

mysql> select * ,
    -> (case when amount<= 3000 then '低' 
    -> when amount<= 5000 then '中'
    -> when amount<= 10000 then '高'
    -> else '未知區(qū)間' end) as 價(jià)格等級(jí) 
    -> from orders;

總結(jié) 

到此這篇關(guān)于Mysql中根據(jù)不同條件來(lái)統(tǒng)計(jì)、匯總數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Mysql根據(jù)不同條件統(tǒng)計(jì)匯總數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

永新县| 永寿县| 奉化市| 荆门市| 淮北市| 定襄县| 潢川县| 佛坪县| 监利县| 阆中市| 樟树市| 沧州市| 忻州市| 西丰县| 祁连县| 准格尔旗| 陈巴尔虎旗| 威远县| 砀山县| 榆中县| 长武县| 金坛市| 台南市| 九寨沟县| 益阳市| 美姑县| 扎鲁特旗| 九寨沟县| 长治市| 靖江市| 赤壁市| 临安市| 尉氏县| 黔东| 临泽县| 民县| 景泰县| 浠水县| 建水县| 溧阳市| 句容市|