欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL動態(tài)列轉(zhuǎn)行的實現(xiàn)示例

 更新時間:2024年11月10日 11:46:53   作者:#看心情  
本文介紹了如何在MySQL中實現(xiàn)動態(tài)列轉(zhuǎn)行的功能,通過使用格式化日期、計數(shù)函數(shù)、分組、存儲過程、分組合并函數(shù)和SQL拼接等技巧,可以將動態(tài)列轉(zhuǎn)換為行,從而更好地進行數(shù)據(jù)分析和展示,感興趣的可以了解一下

介紹??

在實際的數(shù)據(jù)庫查詢中,有時候我們需要將表中的動態(tài)列(即列數(shù)不固定)轉(zhuǎn)換為行,以便更好地進行數(shù)據(jù)分析和展示。在MySQL中,可以通過使用一些技巧和函數(shù)來實現(xiàn)動態(tài)列轉(zhuǎn)行的功能。本文將介紹怎么實現(xiàn)MySQL動態(tài)列轉(zhuǎn)行。

初始表

首先,假設(shè)我們有一個表格 users,其中需要動態(tài)的列 create_time,我們希望將該列轉(zhuǎn)換為行。下面是一個示例表格的結(jié)構(gòu):

# 創(chuàng)建用戶表
DROP TABLE IF EXISTS users;
CREATE TABLE users
(
    id          INT PRIMARY KEY auto_increment COMMENT '主鍵',
    username    VARCHAR(30) NOT NULL COMMENT '用戶名',
    password    VARCHAR(30) NOT NULL COMMENT '密碼',
    nickname    VARCHAR(30) COMMENT '昵稱',
    phone       VARCHAR(11) COMMENT '電話號碼',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',
    is_deleted  INT      DEFAULT 0 COMMENT '邏輯刪除(1:已刪除,0:未刪除)'
) COMMENT '用戶信息表';

# 插入數(shù)據(jù)
INSERT INTO users (username, password, nickname, phone, create_time)
VALUES ('admin', 'admin', '張三', '18955554444', '2023-05-01 22:48:11'),
       ('root', 'root', '李四', '17755624235', '2023-05-02 22:48:11'),
       ('lisi', 'lisi', '王五', '15989654123', '2023-05-03 22:48:11'),
       ('lucky', 'lucky', '趙六', '19956852548', '2023-05-04 22:48:11'),
       ('admin2', 'admin', '張三', '18955554444', '2023-05-01 22:48:11'),
       ('root2', 'root', '李四', '17755624235', '2023-05-02 22:48:11'),
       ('lisi2', 'lisi', '王五', '15989654123', '2023-05-01 22:48:11'),
       ('lucky2', 'lucky', '趙六', '19956852548', '2023-05-01 22:48:11');

想要的效果:

image

通過 格式化日期+計數(shù)函數(shù)+分組 實現(xiàn)

select DATE_FORMAT(create_time,'%Y/%m/%d') as create_date, count(*) as sum from users group by create_date

執(zhí)行結(jié)果:

在這里插入圖片描述

顯然這并不是我們想要的效果。 這時候就需要用到動態(tài)列轉(zhuǎn)行了。

通過 格式日期+求和函數(shù) 實現(xiàn)

SELECT
	SUM( DATE_FORMAT( create_time, '%Y/%m/%d' ) = '2023/05/01' ) AS '2023/05/01',
	SUM( DATE_FORMAT( create_time, '%Y/%m/%d' ) = '2023/05/02' ) AS '2023/05/02',
	SUM( DATE_FORMAT( create_time, '%Y/%m/%d' ) = '2023/05/03' ) AS '2023/05/03',
	SUM( DATE_FORMAT( create_time, '%Y/%m/%d' ) = '2023/05/04' ) AS '2023/05/04' 
FROM
	users

執(zhí)行結(jié)果:

在這里插入圖片描述

這樣就達到我們要的效果了。但是有局限性,如果在加一個日期就需要改SQL。

通過 存儲過程+分組合并函數(shù)+SQL拼接 實現(xiàn)

# 設(shè)置結(jié)束分隔符
DELIMITER $$
# 判斷定義的存儲過程是否存在,存在刪除,以防存儲過程存在報錯
DROP PROCEDURE IF EXISTS pro$$ 
# 創(chuàng)建存儲過程
CREATE PROCEDURE pro () BEGIN
  # 定義一個變量
  SET @SQL = NULL;
	# 把查詢的日期賦給變量
	# 這里需要將日期格式化一下, 我要的格式是yyyy/MM/dd,
	# 而數(shù)據(jù)給我們的是yyyy-MM-dd HH:mm:ss
	SELECT
		GROUP_CONCAT( DISTINCT CONCAT( 'SUM(DATE_FORMAT(create_time, \'%Y/%m/%d\') = ''', 
		DATE_FORMAT( create_time, '%Y/%m/%d' ), ''') AS ''',          
		DATE_FORMAT( create_time, '%Y/%m/%d' ), '''' ) ) INTO @SQL 
	FROM users;
	# 注意:如果運行時報錯可以執(zhí)行
	# SELECT @SQL;
	# 檢查拼接的SQL是否正確
	# 拼接sql
	SET @SQL = concat( 'select ', @SQL, ' from users' );
	# 預(yù)處理語句
	PREPARE stmt FROM	@SQL;
	# 執(zhí)行
	EXECUTE stmt;
	# 銷毀
	DEALLOCATE PREPARE stmt;
# 結(jié)束
END $$ 

 # 調(diào)用存儲過程
CALL pro ();

為了方便測試在插入一筆數(shù)據(jù)

INSERT INTO users (username, password, nickname, phone, create_time)
VALUES ('test', 'test', 'test', '18955554844', '2023-05-08 22:48:11');

執(zhí)行結(jié)果:

在這里插入圖片描述

通過動態(tài)的SQL拼接這種方法可以幫助我們更好地處理動態(tài)列的數(shù)據(jù),方便進行后續(xù)的數(shù)據(jù)分析和展示。這樣就滿足我們的場景了。

到此這篇關(guān)于MySQL動態(tài)列轉(zhuǎn)行的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL動態(tài)列轉(zhuǎn)行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 手把手教你用SQL獲取年、月、周幾、日、時

    手把手教你用SQL獲取年、月、周幾、日、時

    時間處理是我們?nèi)粘i_發(fā)中經(jīng)常遇到的需求,下面這篇文章主要給大家介紹了關(guān)于如何用SQL獲取年、月、周幾、日、時的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 詳解MySQL中的存儲過程和函數(shù)

    詳解MySQL中的存儲過程和函數(shù)

    這篇文章主要為大家詳細介紹了MySQL數(shù)據(jù)庫中的存儲過程和函數(shù)的相關(guān)操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-08-08
  • MySQL索引失效的典型案例

    MySQL索引失效的典型案例

    索引在我們使用MySQL數(shù)據(jù)庫時可以極大的提高查詢效率,然而,有時候因為使用上的一些瑕疵就會導(dǎo)致索引的失效,無法達到我們使用索引的預(yù)期效果,今天介紹一種MySQL中幾種常見的索引失效的原因,可以在以后的工作中盡可能避免因索引失效帶來的坑。
    2021-06-06
  • MySQL導(dǎo)出數(shù)據(jù)遇到secure-file-priv問題的解決方法

    MySQL導(dǎo)出數(shù)據(jù)遇到secure-file-priv問題的解決方法

    這篇文章主要為大家詳細介紹了MySQL導(dǎo)出數(shù)據(jù)遇到secure-file-priv問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • MySQL數(shù)據(jù)庫下用戶及用戶權(quán)限配置

    MySQL數(shù)據(jù)庫下用戶及用戶權(quán)限配置

    這篇文章主要介紹了MySQL數(shù)據(jù)庫下用戶及用戶權(quán)限配置的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • MySQL中join查詢的深入探究

    MySQL中join查詢的深入探究

    數(shù)據(jù)庫中的JOIN稱為連接,連接的主要作用是根據(jù)兩個或多個表中的列之間的關(guān)系,獲取存在于不同表中的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL中join查詢的深入探究,需要的朋友可以參考下
    2022-11-11
  • Navicat for MySQL 11注冊碼\激活碼匯總

    Navicat for MySQL 11注冊碼\激活碼匯總

    Navicat for MySQL注冊碼用來激活 Navicat for MySQL 軟件,只要擁有 Navicat 注冊碼就能激活相應(yīng)的 Navicat 產(chǎn)品。這篇文章主要介紹了Navicat for MySQL 11注冊碼\激活碼匯總,需要的朋友可以參考下
    2020-11-11
  • MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法

    MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法

    這篇文章主要介紹了MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法,本文分別講解了時間戳轉(zhuǎn)換成日期的方法和把日期轉(zhuǎn)換為時間戳的方法,需要的朋友可以參考下
    2015-06-06
  • MySQL最新版8.1.0版本部署和新特性詳解

    MySQL最新版8.1.0版本部署和新特性詳解

    MySQL8.1的應(yīng)該來說是8.0版本的bug修復(fù),這是 MySQL 變更發(fā)版模型后的第一個創(chuàng)新版本,本文給大家介紹了MySQL最新版8.1.0版本部署和新特性,需要的朋友可以參考下
    2023-11-11
  • MySQL幾種更新操作的案例分析

    MySQL幾種更新操作的案例分析

    本文將通過一個用戶賬戶金額更新的案例分析幾種數(shù)據(jù)更新的操作的優(yōu)劣,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論