【請關注】mysql一些經常用到的高級SQL

經常去重復數據,數據需要轉等操作,匯總高級SQL MySQL操作

?

一、數據去重(Data Deduplication)

?

去重常用于清除重復記錄,保留唯一數據。

?

1.?使用DISTINCT關鍵字去重單列

?

-- 從用戶表中獲取唯一的郵箱地址

SELECT DISTINCT email FROM users;

?

?

2.?使用GROUP BY結合聚合函數去重多列

?

-- 按姓名和手機號去重,獲取最新注冊的用戶

SELECT name, phone, MAX(register_time) AS latest_time

FROM users

GROUP BY name, phone;

?

?

3.?使用CTE和ROW_NUMBER()窗口函數標記重復行并刪除

?

-- 先標記重復行,再刪除非首行記錄

WITH DuplicateRows AS (

? ? SELECT id, name, email,

? ? ? ? ? ?ROW_NUMBER() OVER(PARTITION BY email ORDER BY id) AS row_num

? ? FROM users

)

DELETE FROM DuplicateRows WHERE row_num > 1;

?

?

二、數據行轉列(Pivot Table)

?

將行數據轉換為列,常用于統計匯總場景。

?

1.?使用CASE WHEN手動實現行轉列

?

-- 統計每個用戶的不同訂單類型數量

SELECT user_id,

? ? ? ?SUM(CASE WHEN order_type = '食品' THEN 1 ELSE 0 END) AS food_orders,

? ? ? ?SUM(CASE WHEN order_type = '服裝' THEN 1 ELSE 0 END) AS clothes_orders,

? ? ? ?SUM(CASE WHEN order_type = '數碼' THEN 1 ELSE 0 END) AS digital_orders

FROM orders

GROUP BY user_id;

?

?

2.?使用IF函數結合GROUP BY實現動態列

?

-- 按月份統計銷售額(假設月份存于month列)

SELECT product_id,

? ? ? ?SUM(IF(month = 1, sales_amount, 0)) AS jan_sales,

? ? ? ?SUM(IF(month = 2, sales_amount, 0)) AS feb_sales,

? ? ? ?SUM(IF(month = 3, sales_amount, 0)) AS mar_sales

FROM sales

GROUP BY product_id;

?

?

3.?使用動態SQL生成行轉列語句(適用于列名不確定的場景)

?

-- 動態生成SQL(需先查詢列名)

SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT?

? ? ? ?CONCAT('SUM(CASE WHEN category = ''', category, ''' THEN amount ELSE 0 END) AS `', category, '`')

) INTO @sql

FROM sales_data;

?

SET @sql = CONCAT('SELECT year, ', @sql, ' FROM sales_data GROUP BY year');

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

?

?

三、數據類型轉換(Data Type Conversion)

?

在MySQL中轉換數據類型,需注意兼容性和精度損失。

?

1.?顯式轉換:使用CAST()函數

?

-- 將字符串轉為日期類型

SELECT CAST('2025-06-20' AS DATE) AS date_value;

?

-- 將數字轉為字符串(常用于拼接)

SELECT CONCAT('訂單金額:', CAST(amount AS CHAR)) AS order_info

FROM orders;

?

?

2.?顯式轉換:使用CONVERT()函數

?

-- 將字符串轉為DECIMAL類型(保留2位小數)

SELECT CONVERT('123.45', DECIMAL(10,2)) AS price;

?

-- 將日期轉為UNIX時間戳

SELECT CONVERT('2025-06-20', UNSIGNED) AS timestamp_value;

?

?

3.?隱式轉換(MySQL自動轉換,但需注意風險)

?

-- 字符串自動轉數字(僅當字符串為純數字時有效)

SELECT '123' + 456; -- 結果:579

?

-- 日期字符串自動轉日期類型(需符合格式)

INSERT INTO dates (date_col) VALUES ('2025-06-20');

?

?

注意事項

?

- 數據去重:使用?DISTINCT?時會對所有列去重,性能低于?GROUP BY?;刪除重復行前建議先備份數據。

- 行轉列:手動編寫CASE WHEN適用于列數固定的場景,動態SQL需注意SQL注入風險。

- 類型轉換:隱式轉換可能導致意外錯誤(如?'abc' + 1?會轉為?0 + 1?),建議優先使用顯式轉換。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85863.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85863.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85863.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RA4M2開發涂鴉模塊CBU(2)----配置按鍵開啟LED

RA4M2開發涂鴉模塊CBU.2--配置按鍵開啟LED 概述視頻教學樣品申請硬件準備參考程序按鍵口配置中斷回調函數主程序 概述 本實驗演示如何在 Renesas RA4M2 單片機上使用 GPIO 輸入(按鍵) 觸發 GPIO 輸出(LED),并使用e2st…

Linux——Json

一 概念 json是一種輕量級,基于文本的,可讀的數據交換格式,能夠讓數據在不同系統(比如前端—后端,服務器—客戶端)間方便傳遞/存儲。在編程語言中都內置了處理json數據的方法 二 語法規則 1. 數據格式&a…

大模型之微調篇——指令微調數據集準備

寫在前面 高質量數據的準備是微調大模型的重中之重,一些高質量的數據集可能遠比模型性能更佳重要。 我是根據自己的數據照著B站up code花園LLaMA Factory 微調教程:如何構建高質量數據集?_嗶哩嗶哩_bilibili做的。 數據集格式 在LLaMA Fa…

LVS—DR模式

LVS—DR模式 LVS DR 模式詳細簡介 一、模式定義與核心原理 LVS DR(Direct Routing)模式,即直接路由模式,是 Linux Virtual Server(LVS)實現負載均衡的經典模式之一,工作于網絡四層&#xff0…

寶玉分享VibeCoding構建Agent

借助 Claude Code 完成的一個翻譯智能體 (Translator Agent)。你只需輸入一段文字、一個網址或一個本地文件路徑,它就能自動提取內容并完成翻譯。更酷的是,它還能修正原文中的拼寫錯誤,確保譯文的準確流暢。 到底什么是“真正的”AI Agent&a…

在spring boot中使用Logback

在 Spring Boot 中使用 Logback 作為日志框架是開發中的常見需求,因其高性能和靈活配置而廣受青睞。以下是詳細實踐指南,結合了配置方法、代碼示例及最佳實踐: 🔧 一、依賴配置 Spring Boot 默認集成了 Logback,無需手…

騰訊云 Lighthouse 輕量應用服務器:數據驅動的架構選型指南

摘要:騰訊云 Lighthouse 作為面向輕量級應用場景的優化解決方案,通過高性價比套餐式售賣、開箱即用應用模板及流量包計費模式,顯著降低中小企業與開發者的上云門檻。本文基于性能測試與橫向對比,量化分析其核心優勢與適用邊界。 …

Linux TCP/IP協議棧中的TCP輸入處理:net/ipv4/tcp_input.c解析

在網絡通信領域,TCP(傳輸控制協議)因其可靠的面向連接特性而被廣泛應用。Linux內核的TCP/IP協議棧實現了對TCP協議的高效處理,其中net/ipv4/tcp_input.c文件扮演著關鍵角色,負責處理TCP數據包的輸入邏輯。下面是對該文件核心功能的深入剖析。 一、TCP數據包接收與處理 (…

物聯網傳輸網關、RTU、DTU及SCADA系統技術解析

目錄 摘要 一、引言 二、物聯網傳輸網關 1. 定義 2. 類型 3. 分類 4. 工作原理 5. 差異分析 總結: 三、RTU(遠程終端單元) 1. 定義 2. 工作原理 3. 特點 4. 應用場景 四、DTU(數據傳輸單元) 1. 定義 …

【unity游戲開發——熱更新】YooAsset簡化資源加載、打包、更新等流程

注意:考慮到熱更新的內容比較多,我將熱更新的內容分開,并全部整合放在【unity游戲開發——熱更新】專欄里,感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、什么是YooAsset?2、系統需求3、系統特點 一、下載安裝…

AWS RDS/Aurora 開啟 Database Insights 高級模式全攻略

想要深入了解數據庫性能問題?AWS Database Insights 高級模式為您提供強大的性能分析工具。本文詳細對比標準模式與高級模式的功能差異,并提供完整的啟用指南和實戰測試結果。 一、Database Insights 模式對比 AWS CloudWatch Database Insights 提供兩種模式:標準模式和高…

XML SimpleXML

XML SimpleXML 引言 XML(可擴展標記語言)是一種用于存儲和傳輸數據的標記語言,它被廣泛應用于Web服務和數據交換。SimpleXML是PHP中一個處理XML數據非常便捷的庫。本文將詳細介紹SimpleXML庫的基本用法,幫助讀者快速掌握XML數據…

Docker簡單介紹與使用以及下載對應鏡像(項目前置)

DockerDocker安裝Docker卸載Docker配置鏡像源配置鏡像加速 Docker服務命令1.鏡像操作命令2.容器操作命令 安裝Mysql**數據卷掛載** Docker 在linux中軟件安裝說起: 以前在linux中安裝軟件,是直接安裝在linux操作系統中,軟件和操作系統耦合度很高,不方便管理. 因為linux版本不…

MyBatis 簡介

MyBatis 簡介 MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射,能夠幫助開發者將 Java 對象與數據庫表進行靈活映射,簡化數據持久化操作。以下從多個維度詳細介紹 MyBatis: 一、核心定位與優勢 輕量級…

自監督學習在合成孔徑聲吶目標識別中的應用之論文閱讀

自監督學習在合成孔徑聲吶目標識別中的應用 BW Sheffield 美國巴拿馬城海軍水面作戰中心 1 引言 在自主水下航行器(AUVs)中應用計算機視覺面臨著獨特的挑戰,因為海洋環境往往條件不可預測且極為嚴苛。傳統計算機視覺研究主要依賴光學相機成像,而在光照不足、懸浮沉積物及水…

進程間通信2(命名管道)linux

1 命名管道 前面講到匿名管道,有一個很大的限制,那就是只有具有相同祖先(具有親緣關系)的進程間才能進行通信,但是如果想實現不同進程間的通信,這個時候命名管道就發揮著巨大作用。 命名管道是一種特殊類…

簡單通過SenseVoice給自己配置一個語音轉文字服務

首先把代碼下載下來 gitgithub.com:FunAudioLLM/SenseVoice.git 然后寫一個docker文件 FROM ubuntu:latestRUN apt-get update -y RUN apt-get install -y python3-full python3-pip RUN mkdir -p /SenseVoice WORKDIR /SenseVoice RUN python3 -m venv . ENV USE_CUDA0 EXP…

網絡釣魚攻擊

?根據2023年Proofpoint年度網絡釣魚報告顯示:91%的針對性攻擊始于釣魚郵件,平均每30秒就有一個企業成為攻擊目標,全球損失超過$6.5B? 一、釣魚攻擊技術深度解析 1. 釣魚攻擊核心技術架構 2. 現代釣魚技術演進 ?攻擊向量升級路線? ?當前…

uvicorn api:app --host 0.0.0.0 --port 7777容器運行失敗

docker logs pycorrector-container-gpu 你這個報錯的核心是: ERROR: Error loading ASGI app, Could not import module "api".這說明: uvicorn api:app 沒有找到 api.py 文件,或者沒法導入 app 對象。 🔍 一步步排查…

熱成像儀測MOSFET溫度

熱成像儀測MOSFET溫度 根據提供的搜索結果,熱測量方法主要分為非接觸式和接觸式兩大類,針對不同材料特性和測量場景各有優勢。以下是核心方法的總結及關鍵技術要點: 🔥 一、非接觸式熱測量方法 紅外熱成像技術 原理:通…