欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle查詢實例之訂單金額占比與排名分析

 更新時間:2025年11月06日 09:57:43   作者:A耿耿  
這篇文章主要介紹了Oracle查詢實例之訂單金額占比與排名分析的相關(guān)資料,文中通過代碼介紹了兩種方法來查詢每個客戶在每個日期的訂單金額、占比以及排名,需要的朋友可以參考下

題目

假設(shè)有一張表格 orders,記錄了不同日期的訂單記錄,包括訂單號(order_id)、訂單日期(order_date)、客戶 ID(customer_id)、商品 ID(product_id)、商品數(shù)量(quantity)、商品價格(price)。請編寫SQL 查詢語句,查詢出每個客戶在每個日期的訂單金額和該客戶在當(dāng)天的訂單金額占比(百分比)以及該客戶在當(dāng)天的訂單金額占比排名。

建表語句

-- 建表
-- 創(chuàng)建訂單表 ORDERS
CREATE TABLE ORDERS (
    order_id NUMBER PRIMARY KEY,          -- 訂單編號,主鍵
    customer_id NUMBER NOT NULL,          -- 客戶編號
    order_date DATE NOT NULL,             -- 訂單日期
    product_id NUMBER NOT NULL,           -- 商品編號
    quantity NUMBER(5) NOT NULL,          -- 商品數(shù)量
    price NUMBER(10,2) NOT NULL           -- 商品單價
);

-- 插入數(shù)據(jù)
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (1, 101, TO_DATE('2024-04-01', 'YYYY-MM-DD'), 1, 2, 50.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (2, 101, TO_DATE('2024-04-01', 'YYYY-MM-DD'), 2, 1, 100.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (3, 102, TO_DATE('2024-04-01', 'YYYY-MM-DD'), 3, 3, 30.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (4, 103, TO_DATE('2024-04-01', 'YYYY-MM-DD'), 1, 1, 50.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (5, 101, TO_DATE('2024-04-02', 'YYYY-MM-DD'), 2, 2, 100.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (6, 102, TO_DATE('2024-04-02', 'YYYY-MM-DD'), 3, 1, 30.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (7, 103, TO_DATE('2024-04-02', 'YYYY-MM-DD'), 1, 2, 50.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (8, 104, TO_DATE('2024-04-02', 'YYYY-MM-DD'), 2, 1, 100.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (9, 101, TO_DATE('2024-04-03', 'YYYY-MM-DD'), 1, 3, 50.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (10, 102, TO_DATE('2024-04-03', 'YYYY-MM-DD'), 2, 2, 100.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (11, 103, TO_DATE('2024-04-03', 'YYYY-MM-DD'), 3, 1, 30.00);
INSERT INTO ORDERS (order_id, customer_id, order_date, product_id, quantity, price) VALUES (12, 104, TO_DATE('2024-04-03', 'YYYY-MM-DD'), 1, 1, 50.00);

思路一:

1. 計算每個客戶每天的訂單金額

  • 按 order_date 和 customer_id 分組

  • 對每個分組計算:SUM(quantity * price)

2. 計算每天的總訂單金額

  • 按 order_date 分組

  • 對每個分組計算:SUM(quantity * price)

3. 計算每個客戶每天的訂單金額占比

  • 使用上一步的結(jié)果:

    占比 = 客戶當(dāng)天訂單金額 / 當(dāng)天總訂單金額

4. 計算每個客戶在當(dāng)天的訂單金額占比排名

  • 按 order_date 分組

  • 在每個分組內(nèi),按 訂單金額占比 降序排名(使用 ROW_NUMBER() 或 RANK()

圖片分析

最終代碼

with t1 as (
    select
        distinct
        order_date,
        customer_id,
        sum(price * quantity)over(partition by order_date, customer_id ) 用戶訂單金額
    from orders
),
t2 as (
    select
        order_date,
        customer_id,
        用戶訂單金額,
        sum(用戶訂單金額) over (partition by order_date) 當(dāng)天訂單總金額
    from t1
),
t3 as(
    select
        order_date,
        customer_id,
        用戶訂單金額,
        round(用戶訂單金額/當(dāng)天訂單總金額,2) 當(dāng)天訂單金額占比
    from t2
)
select
    order_date,
    customer_id,
    用戶訂單金額,
    當(dāng)天訂單金額占比*100||'%' 占比,
    row_number() over (partition by order_date order by 當(dāng)天訂單金額占比) 排序
from t3

思路二:

1.基礎(chǔ)數(shù)據(jù)分組聚合

目的:計算每個客戶在每個日期的總訂單金額

  • 按 order_date 和 customer_id 分組

  • 對每個分組計算:SUM(price * quantity)

2.計算當(dāng)日訂單金額占比

關(guān)鍵技巧:窗口函數(shù)中的聚合函數(shù)嵌套

  • SUM(SUM(quantity * price)) over(partition by order_date) 的含義:

    • 內(nèi)層 SUM(quantity * price):每個客戶當(dāng)天的訂單金額

    • 外層 SUM(...) over(...):對所有這些客戶金額按日期求和,得到當(dāng)天總金額

    • 相當(dāng)于:客戶當(dāng)天金額 / 當(dāng)天所有客戶總金額

3.計算當(dāng)日排名

排名邏輯

  • partition by order_date:在每個日期內(nèi)獨立排名

  • order by sum(price * quantity) desc:按訂單金額降序排列

  • 使用 RANK():允許并列排名(如兩個客戶金額相同則排名相同)

最終代碼

SELECT
    order_date as 交易日期
    ,customer_id as 客戶ID
    ,sum(price * quantity) as 訂單金額
    ,round(sum(price * quantity) / SUM(SUM(quantity * price)) over(partition by order_date),2) as 當(dāng)日訂單金額占比
    ,rank() over (partition by order_date order by sum(price * quantity)desc) as 當(dāng)日訂單金額排名
FROM orders
group by order_date,customer_id
order by order_date,customer_id

總結(jié) 

到此這篇關(guān)于Oracle查詢實例之訂單金額占比與排名分析的文章就介紹到這了,更多相關(guān)Oracle訂單金額占比與排名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle學(xué)習(xí)筆記(六)

    Oracle學(xué)習(xí)筆記(六)

    最近需要用的oracle,所以大家好好的學(xué)習(xí)下基礎(chǔ)并整理下資料,希望能幫助到需要的朋友。
    2011-12-12
  • 詳解Oracle修改字段類型方法總結(jié)

    詳解Oracle修改字段類型方法總結(jié)

    本篇文章主要介紹了Oracle修改字段類型方法總結(jié),小編覺得不錯,非常具有實用價值,有興趣的可以了解一下。
    2016-12-12
  • oracle 11g的安裝注意事項總結(jié)

    oracle 11g的安裝注意事項總結(jié)

    這篇文章主要給大家介紹了關(guān)于oracle 11g的安裝注意事項,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • oracle基本查詢操作子查詢用法實例分析

    oracle基本查詢操作子查詢用法實例分析

    這篇文章主要介紹了oracle基本查詢操作子查詢用法,結(jié)合實例形式分析了oracle數(shù)據(jù)庫子查詢相關(guān)概念、原理、語法、使用技巧與操作注意事項,需要的朋友可以參考下
    2020-02-02
  • Oracle Instr函數(shù)實例講解

    Oracle Instr函數(shù)實例講解

    instr函數(shù)為字符查找函數(shù),其功能是查找一個字符串在另一個字符串中首次出現(xiàn)的位置,instr函數(shù)在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置,這篇文章主要介紹了Oracle Instr函數(shù)實例講解,需要的朋友可以參考下
    2022-11-11
  • 解決oracle12c創(chuàng)建用戶提示ORA-65096:公用用戶名或角色無效問題

    解決oracle12c創(chuàng)建用戶提示ORA-65096:公用用戶名或角色無效問題

    這篇文章主要介紹了解決oracle12c創(chuàng)建用戶提示ORA-65096:公用用戶名或角色無效問題,需要的朋友可以參考下
    2019-08-08
  • Oracle Table Demo語句應(yīng)用介紹

    Oracle Table Demo語句應(yīng)用介紹

    在開發(fā)過程中可能會用到oracle table demo 操作語句,本文將以此進(jìn)行介紹,需要的朋友可以參考下
    2012-11-11
  • Oracle 11GR2的遞歸WITH子查詢方法

    Oracle 11GR2的遞歸WITH子查詢方法

    這篇文章主要介紹了Oracle 11GR2的遞歸WITH子查詢方法,非常不錯,具有參考借鑒價值,朋友可以參考下
    2017-02-02
  • Oracle用戶密碼含有特殊字符導(dǎo)致無法登陸解決方法

    Oracle用戶密碼含有特殊字符導(dǎo)致無法登陸解決方法

    在客戶端上使用sqlplus用普通用戶可以登錄,但是system以及sys用戶均無法登錄,提示ORA-12154: TNS: 無法解析指定的連接標(biāo)識符,本文將提供詳細(xì)的解決方法,需要了解的朋友可以參考下
    2012-11-11
  • Oracle中幾種常見的數(shù)據(jù)庫錯誤類型及處理方法

    Oracle中幾種常見的數(shù)據(jù)庫錯誤類型及處理方法

    處理常見的數(shù)據(jù)庫錯誤是數(shù)據(jù)庫管理的重要組成部分,以下是幾種常見的數(shù)據(jù)庫錯誤類型及其處理方法,結(jié)合具體代碼示例,以幫助你更好地解決這些問題,感興趣的小伙伴跟著小編一起來看看吧
    2024-09-09

最新評論