国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【sql/python】表中某列值以列表聚合

這篇具有很好參考價(jià)值的文章主要介紹了【sql/python】表中某列值以列表聚合。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

需求背景:
有一個(gè)表含有兩個(gè)字段
“ID”,“VALUE”
1,香蕉
1,蘋果
2,橘子
3,香蕉
3,蘋果
3,橘子
目標(biāo)要求:將每個(gè)ID的VALUE列聚合成一個(gè)字符串列表
“ID”,“VALUE”
1,[香蕉,蘋果]
2,[橘子]
3,[香蕉,蘋果,橘子]

一、SQL使用 LISTAGG函數(shù)聚合方式

---將使用了LISTAGG函數(shù)來將每個(gè)ID的VALUE列聚合成一個(gè)字符串列表,列表中的元素按VALUE字段的順序排序。
SELECT ID, LISTAGG(VALUE, ',') WITHIN GROUP (ORDER BY VALUE) AS VALUE_LIST
FROM  XXX表名
GROUP BY ID

關(guān)于排序的邏輯,想了解的見下回答
【sql/python】表中某列值以列表聚合,sql,python,oracle

二、python連接遠(yuǎn)程數(shù)據(jù)庫的方式,結(jié)果以JSON文件存在本地

也可以在pycharm客戶端使用其他工具(如Python、JSON庫等)來聚合數(shù)據(jù)并生成JSON,將數(shù)據(jù)導(dǎo)出到外部文件,然后給出代碼如下:

import cx_Oracle
# 連接到Oracle數(shù)據(jù)庫
dsn = cx_Oracle.makedsn('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME')
conn = cx_Oracle.connect(user='YOUR_USERNAME', password='YOUR_PASSWORD', dsn=dsn)
# 查詢SQL
query = "select {number_column}, {value_column} FROM {table_name} where rownum<=5"
# 執(zhí)行查詢
cursor = conn.cursor()
cursor.execute(query)

# 初始化一個(gè)字典來聚合同一ID的所有VALUE
id_value_map = {}
# 遍歷查詢結(jié)果并填充字典
for row in cursor:
    # print(row)
    id, value = row
    if id in id_value_map:
        id_value_map[id].append(value)#同一個(gè)ID的VALUE值追加
    else:
        id_value_map[id] = [value]
        
# 轉(zhuǎn)換為所需的JSON格式
json_data = [{"ID": k, "VALUE": v} for k, v in id_value_map.items()]
# 寫入JSON文件
with open('output.json', 'w', encoding='utf-8') as json_file:
    json.dump(json_data, json_file, ensure_ascii=False, indent=4)
# 關(guān)閉數(shù)據(jù)庫連接
cursor.close()
conn.close()

注意:表是普表,以上兩種方法這么執(zhí)行沒有問題!但是,如果表中含有LOB類型字段(large object),即超長(zhǎng)文本字段,方法一 二 就會(huì)報(bào)錯(cuò) !!! 如果遇到“目標(biāo)緩沖區(qū)太小,無法容納字符集轉(zhuǎn)換之后的 CLOB 數(shù)據(jù)”的錯(cuò)誤,這通常意味著在執(zhí)行LISTAGG函數(shù)時(shí),生成的CLOB數(shù)據(jù)超出了數(shù)據(jù)庫允許的緩沖區(qū)大小。

我們可以通過優(yōu)化方法二中的部分代碼來解決這個(gè)問題:

import cx_Oracle
# 連接到Oracle數(shù)據(jù)庫
dsn = cx_Oracle.makedsn('YOUR_HOST', 'YOUR_PORT', service_name='YOUR_SERVICE_NAME')
conn = cx_Oracle.connect(user='YOUR_USERNAME', password='YOUR_PASSWORD', dsn=dsn)
# 查詢SQL
query = "select {number_column}, {value_column} FROM {table_name} where rownum<=5"
# 執(zhí)行查詢
cursor = conn.cursor()
cursor.execute(query)

# 初始化一個(gè)字典來聚合同一ID的所有VALUE
id_value_map = {}
# 遍歷查詢結(jié)果并填充字典
for row in cursor:
    # print(row)
    id, lob_value = row
    # 假設(shè)我們想要讀取整個(gè)LOB數(shù)據(jù)
    if lob_value is not None:#lob_value中存在空值,如果沒有不需要加這個(gè)判斷
        #使用lob_value.read()來讀取LOB對(duì)象中的全部數(shù)據(jù)
        lob_value_str = lob_value.read()
        if id in id_value_map:
            id_value_map[id].append(lob_value_str)
        else:
            id_value_map[id] = [lob_value_str]
            
# 轉(zhuǎn)換為所需的JSON格式
json_data = [{"ID": k, "NOTE": v} for k, v in id_value_map.items()]
# 寫入JSON文件
with open('output_note_ydy.json', 'w', encoding='utf-8') as json_file:
    json.dump(json_data, json_file, ensure_ascii=False, indent=4)
# 關(guān)閉數(shù)據(jù)庫連接
cursor.close()
conn.close()

if lob_value is not None:
因?yàn)槲业谋碇衛(wèi)ob_value中存在空值,所以需要加這個(gè)判斷,不然就會(huì)報(bào)如下錯(cuò)誤。
【sql/python】表中某列值以列表聚合,sql,python,oracle文章來源地址http://www.zghlxwxcb.cn/news/detail-801427.html

到了這里,關(guān)于【sql/python】表中某列值以列表聚合的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • c# 判斷一個(gè)字符串列表是否包含另一個(gè)字符串列表中某一個(gè)元素

    當(dāng)需要判斷一個(gè)字符串列表是否包含另一個(gè)字符串列表中的某個(gè)元素時(shí),可以使用 LINQ 查詢來完成。下面是一個(gè)示例方法: 在上面的示例中,我們有兩個(gè)字符串列表 list1 和 list2。我們想要判斷 list1 是否包含了 list2 中的某個(gè)元素。 我們定義了 ListContainsElement 方法,該方法接

    2024年02月12日
    瀏覽(108)
  • Delphi 中操作MS SQL Server 返回剛插入的自增ID列值

    在開發(fā)數(shù)據(jù)庫的應(yīng)用的時(shí)候,經(jīng)常需要寫入日志,比如某個(gè)日志需要記錄用戶打開程序的時(shí)間和用戶關(guān)閉程序的時(shí)間,顯然這是兩個(gè)動(dòng)作,因?yàn)橛脩舸蜷_程序可能需要使用一段時(shí)間才會(huì)關(guān)閉。那么當(dāng)用戶打開程序時(shí),我們首先就需要插入一條日志記錄,記錄下當(dāng)前用戶打開的

    2024年02月11日
    瀏覽(25)
  • sql進(jìn)階:求滿足某列數(shù)值相加無限接近90%的行(90分位)

    表中有某個(gè)id列和數(shù)值列,求數(shù)值列占比為90%的id,如有個(gè)用戶表,存儲(chǔ)id和消費(fèi)金額order_cnt,求一條sql查出消費(fèi)占比無限接近90%的所有客戶,如表中總消費(fèi)為10000,占比最高的是4000、3000、2800,對(duì)應(yīng)A、B、C用戶,查出A、B、C用戶

    2024年02月15日
    瀏覽(22)
  • 技巧:給excel某列數(shù)據(jù)加雙引號(hào)和逗號(hào),用于sql中in()查詢

    技巧:給excel某列數(shù)據(jù)加雙引號(hào)和逗號(hào),用于sql中in()查詢

    就是需求給過來一個(gè)excel,我們要用其中的某一列作為條件去查詢數(shù)據(jù)庫,刪數(shù)據(jù)或者改數(shù)據(jù)。 這種小需求寫代碼去解析excel不值得,直接寫sql搞定。 在首尾加上單引號(hào)或者雙引號(hào)就可以使用in(…)來查詢。 excel-給某列數(shù)據(jù)加雙引號(hào)和逗號(hào),excel公式里轉(zhuǎn)義 Excel中對(duì)特殊字符的

    2024年02月14日
    瀏覽(53)
  • Python獲取二維數(shù)組(矩陣)第二列值與最大值

    對(duì)于二維數(shù)組(矩陣)的應(yīng)用有多廣與多重要,怎么研究都不為過,突然想獲取其中最大的一組值,發(fā)現(xiàn)max返回的是第一列最大值的這組數(shù),如何獲得第二列最大的這組數(shù)呢? 比如: A=[[1, 2], [12, 22], [22, 5], [22, 50], [122, 50], [330, 3], [4, 400], [34, 56], [3, 44]] 如果max(A),返回的是[330, 3

    2024年02月06日
    瀏覽(28)
  • MYSQL: sql中某一個(gè)字段內(nèi)容為用逗號(hào)分割的字符串轉(zhuǎn)換成多條數(shù)據(jù)(適用于部分樹機(jī)構(gòu))

    MYSQL: sql中某一個(gè)字段內(nèi)容為用逗號(hào)分割的字符串轉(zhuǎn)換成多條數(shù)據(jù)(適用于部分樹機(jī)構(gòu))

    1.創(chuàng)建表的示例 數(shù)據(jù)如下圖: SELECT a.id,SUBSTRING_INDEX(SUBSTRING_INDEX(a.userName,‘,’,b.help_topic_id+1),‘,’,-1) as name from tbl_name a left join mysql.help_topic b on b.help_topic_id (LENGTH(a.userName)-LENGTH(REPLACE(a.userName,‘,’,‘’))+1) ORDER BY a.id; 本人需求為 圖層樹的父級(jí)節(jié)點(diǎn)都在 ancestors 字段中,需要獲取

    2024年02月11日
    瀏覽(50)
  • 【pandas】Python讀取DataFrame的某行或某列

    【pandas】Python讀取DataFrame的某行或某列

    行索引(index) :對(duì)應(yīng)最左邊那一豎列 列索引(columns) :對(duì)應(yīng)最上面那一橫行 .loc[]官方釋義: Access a group of rows and columns by label(s) or a boolean array.(通過標(biāo)簽或布爾數(shù)組訪問一組行和列) 官方鏈接 loc使用索引來取值,基礎(chǔ)用法 df.loc[[行索引],[列索引]] .iloc[]官方釋義: Purely inte

    2024年02月08日
    瀏覽(21)
  • Python 按照某列內(nèi)容對(duì)兩個(gè)DataFrame進(jìn)行合并

    要將兩個(gè)DataFrame進(jìn)行合并,如 data1 ?和? data2 按照第一列的內(nèi)容縱向合并為一個(gè)新的DataFrame,可以使用pandas庫中的merge()方法,按照實(shí)際需求將 how參數(shù)設(shè)置為 ‘left’、‘right’、‘outer’、‘inner’。其中: inner: 內(nèi)連接/交集。保留兩個(gè) DataFrame 共有的鍵,丟棄不匹配的行。

    2024年02月15日
    瀏覽(90)
  • sql-從一個(gè)或多個(gè)表中向一個(gè)表中插入 多行

    INSERT還可以將SELECT語句查詢的結(jié)果插入到表中,此時(shí)不需要把每一條記錄的值一個(gè)一個(gè)輸入,只需 要使用一條INSERT語句和一條SELECT語句組成的組合語句即可快速地從一個(gè)或多個(gè)表中向一個(gè)表中插入 多行。 基本語法格式如下: 在 INSERT 語句中加入子查詢。 不必書寫 VALUES 子句

    2024年02月14日
    瀏覽(23)
  • 用python獲取.csv文件中某一列或者某些列

    ? ? 參考資料:http://t.csdn.cn/HFTPy

    2024年02月13日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包