色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

oracle 行專列

陳思宇1年前7瀏覽0評論

Oracle 行專列是一種十分實用的技巧,可以將多行數(shù)據(jù)合并成為一行,每個數(shù)據(jù)以列的形式呈現(xiàn)。它在數(shù)據(jù)倉庫、數(shù)據(jù)分析等領域廣泛應用。下面我們來看一些例子。

假設我們有這樣一張表orders:

order_id  | product_name | quantity | price
--------- | ------------ | -------- | -----
1         | apple        | 2        | 1.5
1         | orange       | 3        | 2.0
2         | banana       | 1        | 1.2
2         | grape        | 5        | 3.0

我們希望將每個訂單的商品信息合并為一條記錄,可以使用以下 SQL 代碼:

SELECT 
order_id,
LISTAGG(product_name, ',') WITHIN GROUP (ORDER BY product_name) AS products,
SUM(quantity) AS total_quantity,
SUM(quantity * price) AS total_price
FROM orders
GROUP BY order_id;

這里使用了 Oracle 內(nèi)置的LISTAGG函數(shù),它可以將多個字符串拼接為一個字符串,并使用指定的分隔符連接。同時,我們也使用了分組聚合函數(shù)SUM計算數(shù)量和價格的總和。

執(zhí)行上述 SQL 語句后,輸出的結(jié)果如下:

order_id  | products          | total_quantity | total_price
--------- | ----------------- | -------------- | -----------
1         | apple,orange      | 5              | 7.5
2         | banana,grape      | 6              | 19.2

可以看到,每個訂單的商品信息都被合并為一條記錄,前三列為訂單編號、商品名稱以及數(shù)量總和,最后一列為價格總和。

Oracle 行專列也可以用于交叉表查詢,將行數(shù)據(jù)轉(zhuǎn)置為列數(shù)據(jù)。例如,我們有以下表格sales

date       | product_name | amount
---------  | ------------ | ------
2022-01-01 | apple        | 100
2022-01-01 | banana       | 200
2022-01-01 | grape        | 300
2022-01-02 | apple        | 50
2022-01-02 | orange       | 150
2022-01-02 | grape        | 250

現(xiàn)在我們希望將每個日期的銷售額按照商品名稱轉(zhuǎn)置為列數(shù)據(jù),我們可以使用以下 SQL 語句:

SELECT 
date,
SUM(CASE WHEN product_name = 'apple' THEN amount ELSE 0 END) AS apple,
SUM(CASE WHEN product_name = 'banana' THEN amount ELSE 0 END) AS banana,
SUM(CASE WHEN product_name = 'grape' THEN amount ELSE 0 END) AS grape,
SUM(CASE WHEN product_name = 'orange' THEN amount ELSE 0 END) AS orange
FROM sales
GROUP BY date;

這里使用了多個CASE語句,根據(jù)商品名稱計算對應的銷售額,最后將它們放在一起得到每個日期的銷售額。

執(zhí)行上述 SQL 語句后,輸出的結(jié)果如下:

date       | apple | banana | grape | orange
---------  | ----- | ------ | ----- | ------
2022-01-01 | 100   | 200    | 300   | 0
2022-01-02 | 50    | 0      | 250   | 150

可以看到,每個日期的銷售額都按照商品名稱轉(zhuǎn)置為了列數(shù)據(jù)。

總之,Oracle 行專列是一種非常實用的技巧,可以幫助我們將多行數(shù)據(jù)合并為一行或?qū)⑿袛?shù)據(jù)轉(zhuǎn)置為列數(shù)據(jù),更方便地進行數(shù)據(jù)處理和分析。