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

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

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

一、引言

大家在實(shí)際開發(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語句實(shí)現(xiàn)這些統(tǒng)計(jì)需求。

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

1. 創(chuàng)建表

1)新建庫

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

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, '蘋果', '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, '蘋果', '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 語句的作用:根據(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ù)不同條件來統(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)論

汝南县| 台北县| 比如县| 奎屯市| 安远县| 青神县| 昔阳县| 云浮市| 西贡区| 吉林省| 邵东县| 乐都县| 衢州市| 吉水县| 琼结县| 伽师县| 龙川县| 通许县| 泸州市| 星子县| 米脂县| 报价| 宝兴县| 华坪县| 自治县| 南郑县| 兴安县| 汪清县| 长寿区| 瓮安县| 西乌珠穆沁旗| 红原县| 穆棱市| 马龙县| 左云县| 三台县| 大同市| 彭水| 铁力市| 明光市| 云和县|