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

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

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

題目

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

建表語(yǔ)句

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

-- 插入數(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. 計(jì)算每個(gè)客戶每天的訂單金額

  • 按 order_date 和 customer_id 分組

  • 對(duì)每個(gè)分組計(jì)算:SUM(quantity * price)

2. 計(jì)算每天的總訂單金額

  • 按 order_date 分組

  • 對(duì)每個(gè)分組計(jì)算:SUM(quantity * price)

3. 計(jì)算每個(gè)客戶每天的訂單金額占比

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

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

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

  • 按 order_date 分組

  • 在每個(gè)分組內(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ù)分組聚合

目的:計(jì)算每個(gè)客戶在每個(gè)日期的總訂單金額

  • 按 order_date 和 customer_id 分組

  • 對(duì)每個(gè)分組計(jì)算:SUM(price * quantity)

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

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

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

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

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

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

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

排名邏輯

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

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

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

最終代碼

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

相關(guān)文章

  • oracle多條記錄取第一條的實(shí)現(xiàn)

    oracle多條記錄取第一條的實(shí)現(xiàn)

    這篇文章主要介紹了oracle多條記錄取第一條的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Oracle為數(shù)據(jù)大表創(chuàng)建索引的實(shí)現(xiàn)步驟

    Oracle為數(shù)據(jù)大表創(chuàng)建索引的實(shí)現(xiàn)步驟

    在日常業(yè)務(wù)中,避免不了為數(shù)據(jù)量大表補(bǔ)充創(chuàng)建索引的情況,如果快速、有效地創(chuàng)建索引成了一個(gè)至關(guān)重要的問(wèn)題,但對(duì)于超大量的,建議在原表上直接操作,所以本文給大家介紹了Oracle為數(shù)據(jù)大表創(chuàng)建索引的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2025-09-09
  • ORACLE查看當(dāng)前連接數(shù)的常見(jiàn)方法及解釋

    ORACLE查看當(dāng)前連接數(shù)的常見(jiàn)方法及解釋

    做數(shù)據(jù)庫(kù)開(kāi)發(fā)的時(shí)候,有時(shí)候會(huì)遇到連接超出最大限制的問(wèn)題,這時(shí)候,我們需要查看數(shù)據(jù)庫(kù)的連接數(shù),這篇文章主要介紹了ORACLE查看當(dāng)前連接數(shù)的常見(jiàn)方法及解釋,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • Oracle數(shù)據(jù)庫(kù)中如何給表賦予權(quán)限

    Oracle數(shù)據(jù)庫(kù)中如何給表賦予權(quán)限

    賦權(quán)是指將特定的權(quán)限授予用戶或用戶組,以便他們可以執(zhí)行特定的操作,如查詢、插入、更新和刪除數(shù)據(jù),創(chuàng)建和修改表結(jié)構(gòu),以及執(zhí)行其他管理任務(wù),這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)中如何給表賦予權(quán)限的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Oracle?處理json數(shù)據(jù)的方法

    Oracle?處理json數(shù)據(jù)的方法

    Json數(shù)據(jù)一般使用varchar2(400),varchar2(32676)或者BLOB來(lái)存儲(chǔ)Json數(shù)據(jù),這篇文章主要介紹了Oracle?處理json數(shù)據(jù)的相關(guān)知識(shí),需要的朋友可以參考下
    2022-11-11
  • 裝Oracle用PLSQL連接登錄時(shí)不顯示數(shù)據(jù)庫(kù)的解決

    裝Oracle用PLSQL連接登錄時(shí)不顯示數(shù)據(jù)庫(kù)的解決

    這篇文章主要介紹了裝Oracle用PLSQL連接登錄時(shí)不顯示數(shù)據(jù)庫(kù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫(kù)的關(guān)系

    深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫(kù)的關(guān)系

    本篇文章是對(duì)oracle中方案的概念以及方案與數(shù)據(jù)庫(kù)的關(guān)系進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • SQL中Charindex和Oracle中對(duì)應(yīng)的函數(shù)Instr對(duì)比

    SQL中Charindex和Oracle中對(duì)應(yīng)的函數(shù)Instr對(duì)比

    在項(xiàng)目中用到了Oracle中 Instr 這個(gè)函數(shù),順便仔細(xì)的再次學(xué)習(xí)了一下這個(gè)知識(shí),使用 Instr 函數(shù)對(duì)某個(gè)字符串進(jìn)行判斷,判斷其是否含有指定的字符
    2013-10-10
  • oracle10g發(fā)送email示例

    oracle10g發(fā)送email示例

    本文介紹了通過(guò)Oracle10g發(fā)送Email的實(shí)例,該P(yáng)rocedure支持中文郵件、HTML代碼、多收件人。 ,需要的朋友可以參考下
    2014-01-01
  • Oracle date 和 timestamp 區(qū)別詳解

    Oracle date 和 timestamp 區(qū)別詳解

    這篇文章主要介紹了Oracle date 和 timestamp 區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論

绥德县| 四子王旗| 大兴区| 丹寨县| 雷山县| 万州区| 古蔺县| 崇义县| 沈阳市| 金川县| 扶风县| 岚皋县| 扎鲁特旗| 汝南县| 吐鲁番市| 蒙山县| 华亭县| 建昌县| 平武县| 酒泉市| 禄丰县| 边坝县| 弥渡县| 安庆市| 阜新市| 桑日县| 图片| 北流市| 临武县| 谷城县| 砀山县| 同仁县| 通州市| 黑山县| 资兴市| 湾仔区| 汤阴县| 门源| 太湖县| 勐海县| 木里|