搜尋
首頁資料庫mysql教程詳解mysql列轉行,合併欄位的方法(圖文)

下面小編就為大家帶來一篇mysql 列轉行,合併欄位的方法(必看)。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟著小編過來看看吧

資料表:

詳解mysql列轉行,合併欄位的方法(圖文)

列轉行:利用max( case when then)

max---聚合函數 取最大值

(case course when '語文' then score else 0 end) ---判斷

as 語文---別名作為列名

SELECT
 `name`,
 MAX(
  CASE 
  WHEN course='语文' THEN
   score
  END
 ) AS 语文,
 MAX(
  CASE 
  WHEN course='数学' THEN
   score
  END
 ) AS 数学, 
 MAX(
  CASE 
  WHEN course='英语' THEN
   score
  END
 ) AS 英语
FROM
 student
GROUP BY `name`
;

詳解mysql列轉行,合併欄位的方法(圖文)

合併欄位顯示:利用group_cancat (course,”:”,”score”)

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
GROUP BY
 `name`;

詳解mysql列轉行,合併欄位的方法(圖文)

#group_concat(),手冊上說明:該函數傳回帶有來自一個群組的連接的非 NULL值的字串結果。
比較抽象,難以理解。

通俗點理解,其實是這樣的:group_concat()會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要傳回哪些列,由函

數參數(就是字段名)決定。分組必須有個標準,就是依照group by指定的欄位進行分組。

group_concat函數應該是在內部執行了group by語句,這是我的猜測。

1.測試語句:

SELECT
 GROUP_CONCAT(`name`)
FROM
 student
GROUP BY
 `name`;

結果去找name中去找哪些值是一樣的,如果相等,就全部列出來,以逗號分割進行列出,如下:

group_concat('name')

詳解mysql列轉行,合併欄位的方法(圖文)

##2 .測試:

SELECT
 GROUP_CONCAT(`name`)
FROM
 student
;

結果:

#group_concat('name')

詳解mysql列轉行,合併欄位的方法(圖文)

上面是否可以證明,group_concat只有與group by語句同時使用才能產生效果? 下面進行了實際測驗

3.測試常數對group_concat()的設定影響:

SET @@GROUP_CONCAT_MAX_LEN=4

手冊中提到設定的語法是這樣的:


SET [SESSION | GLOBAL] group_concat_max_len = val;

##兩種有什麼差別?

SET @@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;

4.使用語句

SELECT
GROUP_CONCAT(`name`)
FROM
student;

結果得到:

group_concat('name')

詳解mysql列轉行,合併欄位的方法(圖文)

結論:group_concat()函數需要與group by語句在一起使用,才能得到所需的效果。 原因可以這樣理解:group_concat()得到是屬於x群組的所有成員(函數裡面列參數指定需要顯示哪些欄位)。 x組從哪裡來?

如果沒有group by進行指定,那麼根本不知道group_concat()根據哪個分組進行顯示出成員。 所以,像上面沒有group by子句的時候,就顯示了劉備,關羽,張飛,劉備,關羽,張飛,劉備,關羽,張飛。


實際上什麼時候需要用到這個函數?
假如需要

查詢

的結果是這樣:左邊顯示群組名,右邊想顯示該組別下的所有成員資訊。用這個函數,就可以省去很多事情了。

另外,假如我這樣使用:

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
;
意義不大。


group_concat()指定一個欄位是最好的情況。如果指定了多個列。

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
GROUP BY
 `name`;

那麼顯示結果類似這樣:

group_concat(course,":",score)

詳解mysql列轉行,合併欄位的方法(圖文)#

以上是詳解mysql列轉行,合併欄位的方法(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
與其他RDBM相比,MySQL如何處理並發?與其他RDBM相比,MySQL如何處理並發?Apr 29, 2025 am 12:44 AM

MySQLhandlesconcurrencyusingamixofrow-levelandtable-levellocking,primarilythroughInnoDB'srow-levellocking.ComparedtootherRDBMS,MySQL'sapproachisefficientformanyusecasesbutmayfacechallengeswithdeadlocksandlacksadvancedfeatureslikePostgreSQL'sSerializa

MySQL與其他關係數據庫相比如何處理交易?MySQL與其他關係數據庫相比如何處理交易?Apr 29, 2025 am 12:37 AM

mySqlHandLestActionSefectefectionalytheinnodbengine,supportingAcidPropertiessimilartopostgresqlesqlandoracle.1)mySqluessRepeTableReadAbereadasTheDefaultIsolationLeleleteLevel,whatcanBeadJustEdToreDtoreDtoreDtoreadCommittedCommittenCommententCommittedForHigh-TrafficsCenarios.2)

MySQL中有哪些數據類型?MySQL中有哪些數據類型?Apr 29, 2025 am 12:28 AM

MySQL的數據類型分為數值、日期和時間、字符串、二進制和空間類型。選擇正確的類型可以優化數據庫性能和數據存儲。

在MySQL中編寫有效的SQL查詢的最佳實踐是什麼?在MySQL中編寫有效的SQL查詢的最佳實踐是什麼?Apr 29, 2025 am 12:24 AM

最佳實踐包括:1)理解數據結構和MySQL處理方式,2)適當索引,3)避免SELECT*,4)使用合適的JOIN類型,5)謹慎使用子查詢,6)使用EXPLAIN分析查詢,7)考慮查詢對服務器資源的影響,8)定期維護數據庫。這些做法能使MySQL查詢不僅快速,還具備可維護性、可擴展性和資源效率。

MySQL與PostgreSQL有何不同?MySQL與PostgreSQL有何不同?Apr 29, 2025 am 12:23 AM

MySQLisbetterforspeedandsimplicity,suitableforwebapplications;PostgreSQLexcelsincomplexdatascenarioswithrobustfeatures.MySQLisidealforquickprojectsandread-heavytasks,whilePostgreSQLispreferredforapplicationsrequiringstrictdataintegrityandadvancedSQLf

MySQL如何處理數據複製?MySQL如何處理數據複製?Apr 28, 2025 am 12:25 AM

MySQL通過異步、半同步和組複製三種模式處理數據複製。 1)異步複製性能高但可能丟失數據。 2)半同步複製提高數據安全性但增加延遲。 3)組複製支持多主複製和故障轉移,適用於高可用性需求。

您如何使用解釋性語句分析查詢性能?您如何使用解釋性語句分析查詢性能?Apr 28, 2025 am 12:24 AM

EXPLAIN語句可用於分析和提升SQL查詢性能。 1.執行EXPLAIN語句查看查詢計劃。 2.分析輸出結果,關注訪問類型、索引使用情況和JOIN順序。 3.根據分析結果,創建或調整索引,優化JOIN操作,避免全表掃描,以提升查詢效率。

您如何備份並還原MySQL數據庫?您如何備份並還原MySQL數據庫?Apr 28, 2025 am 12:23 AM

使用mysqldump進行邏輯備份和MySQLEnterpriseBackup進行熱備份是備份MySQL數據庫的有效方法。 1.使用mysqldump備份數據庫:mysqldump-uroot-pmydatabase>mydatabase_backup.sql。 2.使用MySQLEnterpriseBackup進行熱備份:mysqlbackup--user=root--password=password--backup-dir=/path/to/backupbackup。恢復時,使用相應的命

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)