国产精品亚洲成在人线_中文字幕在线最新在线不卡_日本欧美一区二区三区乱码_亚洲福利一区二区

9000px;">
  • <menu id="esycg"><strong id="esycg"></strong></menu>
  • <input id="esycg"></input>

    當(dāng)前位置 主頁(yè) > 技術(shù)大全 >

      面試官問 MySQL 行轉(zhuǎn)列?我把靜態(tài)和動(dòng)態(tài)兩種方案都講明白了

      欄目:技術(shù)大全 時(shí)間:2025-09-19 22:40

      MySQL中的"行轉(zhuǎn)列"是一個(gè)經(jīng)典且非常實(shí)用的數(shù)據(jù)處理技巧,通常用于將數(shù)據(jù)從一種易于存儲(chǔ)的格式轉(zhuǎn)換為一種更易于閱讀和報(bào)告的格式。下面我將詳細(xì)解釋其概念、方法和應(yīng)用場(chǎng)景。

      核心概念:什么是行轉(zhuǎn)列?

      • 行數(shù)據(jù):通常指數(shù)據(jù)庫(kù)中最自然的存儲(chǔ)格式,每一行代表一條獨(dú)立的記錄。

      | 學(xué)生姓名 | 科目 | 成績(jī) |

      | :------- | :--- | :--- |

      | 張三 | 語(yǔ)文 | 90 |

      | 張三 | 數(shù)學(xué) | 85 |

      | 李四 | 語(yǔ)文 | 95 |

      | 李四 | 數(shù)學(xué) | 70 |

      • 列數(shù)據(jù)(行轉(zhuǎn)列后的目標(biāo)):將某一列的唯一值(如​​科目​​​)轉(zhuǎn)換為新的列名,并將其對(duì)應(yīng)的值(如​​成績(jī)​​)填充到新列下。

      | 學(xué)生姓名 | 語(yǔ)文 | 數(shù)學(xué) |

      | :------- | :--- | :--- |

      | 張三 | 90 | 85 |

      | 李四 | 95 | 70 |

      這種轉(zhuǎn)換也稱為數(shù)據(jù)透視(PIVOT)。


      實(shí)現(xiàn)行轉(zhuǎn)列的幾種方法

      假設(shè)我們有上文的成績(jī)表 ​​scores​​。

      方法一:使用 ​​CASE WHEN​​ + 聚合函數(shù)(最通用、最靈活)

      這是最經(jīng)典和兼容性最好的方法,適用于幾乎所有版本的 MySQL。

      思路

      1. 使用 ​​GROUP BY​​​ 按唯一標(biāo)識(shí)(如​​學(xué)生姓名​​)分組,確保一行一個(gè)學(xué)生。
      2. 對(duì)每個(gè)需要轉(zhuǎn)換的列值,使用 ​​CASE WHEN​​​(或 ​​IF​​)語(yǔ)句判斷并提取對(duì)應(yīng)的值。
      3. 使用 ​​MAX​​​ 或 ​​MIN​​​、​​SUM​​ 等聚合函數(shù)對(duì)提取出的值進(jìn)行聚合(通常用于確保每個(gè)分組下只有一個(gè)非空值)。

      SQL 示例

      SELECT
      
      學(xué)生姓名,
      
      MAX(CASE WHEN 科目 = '語(yǔ)文' THEN 成績(jī) ELSE NULL END) AS 語(yǔ)文,
      
      MAX(CASE WHEN 科目 = '數(shù)學(xué)' THEN 成績(jī) ELSE NULL END) AS 數(shù)學(xué)
      
      -- , ...可以繼續(xù)添加其他科目
      
      FROM scores
      
      GROUP BY 學(xué)生姓名;

      結(jié)果

      | 學(xué)生姓名 | 語(yǔ)文 | 數(shù)學(xué) |

      | :------- | :--- | :--- |

      | 張三 | 90 | 85 |

      | 李四 | 95 | 70 |

      為什么用 MAX

      因?yàn)?​​GROUP BY​​​ 后,每個(gè)學(xué)生的每門科目理論上只有一條記錄。​​MAX​​​ 的作用是取回那條唯一記錄的值。如果不用聚合函數(shù),SQL 會(huì)報(bào)錯(cuò)。你也可以用 ​​MIN​​​ 或 ​​SUM​​,效果相同。

      方法二:使用 ​​IF()​​ + 聚合函數(shù)(MySQL 的簡(jiǎn)潔寫法)

      ​IF(condition, value_if_true, value_if_false)​​​ 是 ​​CASE WHEN​​ 的簡(jiǎn)化版,邏輯更清晰。

      SQL 示例

      SELECT
      
      學(xué)生姓名,
      
      MAX(IF(科目 = '語(yǔ)文', 成績(jī), NULL)) AS 語(yǔ)文,
      
      MAX(IF(科目 = '數(shù)學(xué)', 成績(jī), NULL)) AS 數(shù)學(xué)
      
      FROM scores
      
      GROUP BY 學(xué)生姓名;

      效果與方法一完全相同。

      方法三:使用 ​​GROUP_CONCAT​​(另一種形式的“行轉(zhuǎn)列”)

      有時(shí)“轉(zhuǎn)列”的目的不是生成多個(gè)新列,而是將多行數(shù)據(jù)合并到一個(gè)單元格中,用分隔符連接。這時(shí) ​​GROUP_CONCAT​​ 非常有用。

      SQL 示例

      SELECT
      
      學(xué)生姓名,
      
      GROUP_CONCAT(科目, ':', 成績(jī) SEPARATOR '; ') AS 成績(jī)單
      
      FROM scores
      
      GROUP BY 學(xué)生姓名;

      結(jié)果

      | 學(xué)生姓名 | 成績(jī)單 |

      | :------- | :----------------- |

      | 張三 | 語(yǔ)文:90; 數(shù)學(xué):85 |

      | 李四 | 語(yǔ)文:95; 數(shù)學(xué):70 |


      高級(jí)應(yīng)用:動(dòng)態(tài)行轉(zhuǎn)列

      上面的方法有個(gè)巨大缺陷:需要手動(dòng)編寫每個(gè)要轉(zhuǎn)換的列值(如‘語(yǔ)文’、‘數(shù)學(xué)’)。如果科目是不確定的(例如隨時(shí)會(huì)增加‘英語(yǔ)’、‘物理’),上面的 SQL 就無(wú)法滿足需求。

      這時(shí)需要使用存儲(chǔ)過程(Stored Procedure) 來(lái)動(dòng)態(tài)生成 SQL 語(yǔ)句。

      思路

      1. 查詢出所有需要轉(zhuǎn)換為列名的唯一值(如所有科目)。
      2. 使用字符串拼接函數(shù)(如 ​​CONCAT​​​, ​​GROUP_CONCAT​​​)構(gòu)造出包含所有 ​​CASE WHEN​​ 語(yǔ)句的 SQL 字符串。
      3. 使用預(yù)處理語(yǔ)句(​​PREPARE​​​ & ​​EXECUTE​​)來(lái)執(zhí)行這個(gè)動(dòng)態(tài)生成的 SQL 字符串。

      示例代碼

      -- 1. 定義變量存儲(chǔ)動(dòng)態(tài)生成的SQL
      
      SET @sql = NULL;
      
      
      
      -- 2. 查詢所有不重復(fù)的科目,并拼接成 MAX(CASE WHEN...) 的格式
      
      SELECT
      
      GROUP_CONCAT(DISTINCT
      
      CONCAT(
      
      'MAX(IF(科目 = ''',
      
      科目,
      
      ''', 成績(jī), NULL)) AS ',
      
      CONCAT('`', 科目, '`') -- 用反引號(hào)包裹科目名,防止它是關(guān)鍵字
      
      )
      
      ) INTO @sql
      
      FROM scores;
      
      
      
      -- 3. 拼接完整的SQL語(yǔ)句
      
      SET @sql = CONCAT('SELECT 學(xué)生姓名, ', @sql, ' FROM scores GROUP BY 學(xué)生姓名');
      
      
      
      -- 4. 預(yù)處理并執(zhí)行動(dòng)態(tài)SQL
      
      PREPARE stmt FROM @sql;
      
      EXECUTE stmt;
      
      DEALLOCATE PREPARE stmt;

      執(zhí)行結(jié)果:無(wú)論科目如何變化,這段代碼都會(huì)自動(dòng)生成一個(gè)將所有科目作為列名的透視表。

      | 學(xué)生姓名 | 語(yǔ)文 | 數(shù)學(xué) | 英語(yǔ) | (其他任何科目...) |

      | :------- | :--- | :--- | :--- | :------------------ |

      | 張三 | 90 | 85 | 92 | ... |

      | 李四 | 95 | 70 | 88 | ... |


      總結(jié)與選擇

      | 方法 | 適用場(chǎng)景 | 優(yōu)點(diǎn) | 缺點(diǎn) |

      | :----------------- | :--------------------------------------------- | :--------------------------- | :----------------------------- |

      | ​CASE WHEN/IF​ | 要轉(zhuǎn)換的列值是固定的、已知的(如科目固定) | 簡(jiǎn)單、直觀、性能好 | 無(wú)法自動(dòng)適應(yīng)列值的變化 |

      | ​GROUP_CONCAT

      | 動(dòng)態(tài)SQL | 要轉(zhuǎn)換的列值是動(dòng)態(tài)的、不確定的(如科目可變) | 全自動(dòng),一勞永逸 | 編寫復(fù)雜,需要用到存儲(chǔ)過程和預(yù)處理 |

      核心要點(diǎn)

      1. 行轉(zhuǎn)列的本質(zhì)是條件判斷和分組聚合。
      2. 靜態(tài)轉(zhuǎn)換使用 ​​CASE WHEN​​​/​​IF​​​ + ​​MAX​​​ + ​​GROUP BY​​。
      3. 動(dòng)態(tài)轉(zhuǎn)換需要使用存儲(chǔ)過程拼接 SQL,復(fù)雜度較高。
      4. 在選擇方法前,一定要明確需求中的“列”是否是固定的。

      另外搭配便捷的MYSQL備份工具,可定時(shí)備份、異地備份,MYSQL導(dǎo)出導(dǎo)入。可本地連接LINUX里的MYSQL,簡(jiǎn)單便捷?梢源蟠蟮靥岣吖ぷ餍枢。

    MySQL鎖表會(huì)影響你的備份操作嗎?
    探索MySQL引擎?先掌握其備份恢復(fù)原理!
    mysql怎么安裝,MySQL安裝完畢怎樣設(shè)置自動(dòng)備份才省心?
    MySQL 全連接(FULL OUTER JOIN)完全指南:語(yǔ)法、誤區(qū)與 UNION 實(shí)現(xiàn)方案
    MySQL刪除數(shù)據(jù)詳解:DELETE與TRUNCATE的原理、區(qū)別與正確選用
    MySQL UPDATE語(yǔ)句詳解:從基礎(chǔ)語(yǔ)法到多表連接更新實(shí)戰(zhàn)
    從備份到驗(yàn)證:MySQL表字段刪除操作的標(biāo)準(zhǔn)化流程與最佳實(shí)踐
    MySQL分頁(yè)查詢?cè)斀猓簭腖IMIT/OFFSET基礎(chǔ)到鍵集分頁(yè)性能優(yōu)化實(shí)戰(zhàn)
    告別SQL注入:詳解Python中MySQL參數(shù)化查詢的正確使用方法
    MySQL 表結(jié)構(gòu)升級(jí):ALTER TABLE ADD COLUMN 語(yǔ)法詳解與最佳實(shí)踐
    国产精品亚洲成在人线_中文字幕在线最新在线不卡_日本欧美一区二区三区乱码_亚洲福利一区二区
  • <menu id="esycg"><strong id="esycg"></strong></menu>
  • <input id="esycg"></input>
  • 国产无一区二区| 日韩国产成人精品| 国产精品无人区| 欧美日韩一区在线观看| 亚洲国产精品久久一线不卡| 欧美老人xxxx18| 日韩视频一区二区在线观看| 中文一区二区完整视频在线观看| 久久亚洲精品国产精品紫薇| 九九精品视频在线看| 不卡av在线网| 欧美吻胸吃奶大尺度电影| 99久久777色| 91精品在线一区二区| 日本韩国欧美一区二区三区| 亚洲国产视频一区| 日韩一区二区三区高清免费看看| 亚洲精品伦理在线| 欧美日韩一级片网站| 在线观看欧美黄色| 日本一区二区三级电影在线观看| 国产伦精一区二区三区| 狠狠色狠狠色综合系列| 欧美精品久久久久久久久老牛影院| 欧美日韩国产精选| 久久免费的精品国产v∧| 日韩西西人体444www| 亚洲三级在线免费| 色婷婷久久久久swag精品| 日韩三级视频在线看| 中文一区二区在线观看| ww久久中文字幕| 日韩一区有码在线| 日韩一区二区电影网| 亚洲国产精品视频| 欧美一区二区三区免费视频| 国产精品一线二线三线精华| 国产精品福利av| 精品黑人一区二区三区久久| 亚洲精品一区二区三区99| 欧美午夜精品一区二区三区| 美女视频网站黄色亚洲| 久久九九国产精品| 国产一区二区三区免费在线观看| 久久久精品国产免大香伊| 欧洲国内综合视频| 国内成人自拍视频| 欧美一区二区视频网站| 一区在线观看视频| 精品日韩一区二区| 久久夜色精品国产欧美乱极品| 欧美日韩高清在线播放| 日本精品免费观看高清观看| 蜜桃视频一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 日本欧美在线看| 欧美在线一区二区| 亚洲国产综合色| 国产精品综合在线视频| 国产精品美女久久久久久| 欧美高清www午色夜在线视频| 日韩三区在线观看| 亚洲激情综合网| 午夜不卡av在线| 天天综合日日夜夜精品| 国产一区二区91| 7777精品伊人久久久大香线蕉经典版下载| 国产在线不卡视频| 久久久精品国产免费观看同学| 激情图片小说一区| 精品粉嫩aⅴ一区二区三区四区| 秋霞午夜av一区二区三区| 免费视频一区二区| 欧美色综合网站| 欧美一级片免费看| 中文字幕免费不卡| 亚洲伦理在线免费看| 精品国产免费一区二区三区香蕉| 日韩欧美自拍偷拍| 久久久久久99久久久精品网站| 91网上在线视频| 91丨九色丨国产丨porny| 在线精品视频免费播放| 一区二区三区四区国产精品| 久久成人18免费观看| 成人精品视频.| 国产精品网站在线播放| 中文字幕在线不卡国产视频| 欧美专区亚洲专区| 成人免费黄色在线| 日韩美女视频一区二区| 欧美日韩视频不卡| 成人av网站免费| 欧美一级免费大片| 亚洲国产另类精品专区| 五月婷婷综合激情| 欧美日韩在线播放三区| www国产精品av| 日韩av在线播放中文字幕| 91麻豆精品国产91| 欧美特级限制片免费在线观看| 日韩欧美一二区| 国产亚洲精品久| 婷婷成人激情在线网| 日韩电影在线免费看| 2022国产精品视频| 欧美一级二级在线观看| 久久国产免费看| 欧美日韩成人在线一区| 91精品国产色综合久久ai换脸| 国产精品免费久久久久| 欧美亚洲综合色| 麻豆精品视频在线观看视频| 成人免费看片app下载| 亚洲国产岛国毛片在线| 日韩一区精品视频| 国产99久久久国产精品潘金| 亚洲老妇xxxxxx| 成人小视频在线| 六月婷婷色综合| 国产一区二区三区| 视频一区二区不卡| 不卡欧美aaaaa| 免费av网站大全久久| 26uuu精品一区二区在线观看| 欧美国产日本视频| 2021国产精品久久精品| 欧美电影免费提供在线观看| 国产一区二区三区四区在线观看| 色综合天天综合网天天狠天天| 91在线精品一区二区三区| 国产.欧美.日韩| 色综合婷婷久久| 欧亚洲嫩模精品一区三区| 日日嗨av一区二区三区四区| 亚洲黄一区二区三区| 亚洲精品视频在线观看网站| 国产精品麻豆久久久| 福利一区二区在线观看| 欧美电影在哪看比较好| 中文字幕在线不卡一区二区三区| 国产福利一区二区三区在线视频| 欧美日韩一级片在线观看| 国产做a爰片久久毛片| 一本久久精品一区二区| 亚洲品质自拍视频网站| 91久久精品国产91性色tv| 激情综合色播五月| 国产最新精品精品你懂的| 午夜激情综合网| 成人av综合在线| 在线观看免费成人| 亚洲制服欧美中文字幕中文字幕| 中文字幕人成不卡一区| 国产一区日韩二区欧美三区| 欧美精品一级二级| 亚洲制服丝袜在线| 欧美刺激午夜性久久久久久久| 国产精品亲子乱子伦xxxx裸| 国产精品麻豆99久久久久久| 国产欧美精品国产国产专区| 一本一道久久a久久精品综合蜜臀| 精品乱人伦一区二区三区| 肉肉av福利一精品导航| av中文一区二区三区| 久久久亚洲精华液精华液精华液| 久久青草国产手机看片福利盒子| 91美女片黄在线观看| 国产精品人妖ts系列视频| 一区二区视频在线看| 国产精品毛片久久久久久久| 国产乱一区二区| 91精品国产高清一区二区三区蜜臀| 日本不卡1234视频| 1区2区3区精品视频| 欧美色精品天天在线观看视频| 欧美激情在线观看视频免费| 精品视频一区二区三区免费| 亚洲老妇xxxxxx| 亚洲资源中文字幕| 国产亚洲精品资源在线26u| 亚洲超丰满肉感bbw| 91久久国产综合久久| 国产精品久久久久一区二区三区共| 国产精品2024| 亚洲午夜激情网页| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美吻胸吃奶大尺度电影| 国产传媒欧美日韩成人| 日本亚洲一区二区| 国产在线观看免费一区| www.欧美精品一二区| 99久久国产综合精品色伊| 麻豆精品在线播放| 国产精品国产三级国产普通话三级| 亚洲国产aⅴ成人精品无吗| 国产亚洲视频系列| 欧美伊人久久大香线蕉综合69| 欧美日韩aaaaaa| 亚洲色图一区二区|