MySQL之使用WITH子句和臨時(shí)表達(dá)式進(jìn)行數(shù)據(jù)分析和篩選方式
使用WITH子句和臨時(shí)表達(dá)式進(jìn)行數(shù)據(jù)分析和篩選
MySQL支持使用WITH創(chuàng)建臨時(shí)表達(dá)式,通常稱為"Common Table Expressions"(CTE)。
CTE 通常用于較復(fù)雜的查詢,為復(fù)雜查詢提供了一種更清晰、模塊化的方式,以提高復(fù)雜查詢的可讀性和易維護(hù)性。
舉個(gè)通用的例子
my_cte是一個(gè)臨時(shí)表達(dá)式,它包含了從my_table中選擇滿足某個(gè)條件的列,然后,在查詢的其余部分中引用這個(gè)臨時(shí)表達(dá)式
WITH my_cte AS (
SELECT
column1,
column2
FROM
my_table
WHERE
condition
)
SELECT
*
FROM
my_cte
WHERE
column1 > 10;
WITH子句定義的CTE只在查詢執(zhí)行期間存在,不會(huì)在數(shù)據(jù)庫(kù)中永久存儲(chǔ)。
在使用時(shí),需確保自己的MySQL版本支持WITH語(yǔ)句,因?yàn)椴煌腗ySQL版本可能對(duì)此支持程度有所不同。
舉個(gè)實(shí)際的例子
假設(shè)有一個(gè)包含員工信息的表employee:
CREATE TABLE employee (
emp_id INT,
emp_name VARCHAR(50),
emp_salary DECIMAL(10, 2),
department_id INT
);
INSERT INTO employee VALUES
(1, 'John Doe', 50000.00, 1),
(2, 'Jane Smith', 60000.00, 2),
(3, 'Bob Johnson', 75000.00, 1),
(4, 'Alice Williams', 80000.00, 2);
現(xiàn)在,需要計(jì)算每個(gè)部門(mén)的平均工資,并只選擇部門(mén)平均工資高于整體平均工資的部門(mén)員工記錄,可以使用WITH子句來(lái)實(shí)現(xiàn):
WITH department_avg_salary AS (
SELECT
department_id,
AVG(emp_salary) AS avg_salary
FROM
employee
GROUP BY
department_id
)
SELECT
e.emp_id,
e.emp_name,
e.emp_salary,
e.department_id
FROM
employee e
JOIN
department_avg_salary d ON e.department_id = d.department_id
WHERE
d.avg_salary > (SELECT AVG(emp_salary) FROM employee);
在上述例子中,department_avg_salary是一個(gè)CTE,它計(jì)算每個(gè)部門(mén)的平均工資。
然后,通過(guò)JOIN將employee表與這個(gè)臨時(shí)表連接,并在最后的WHERE子句中過(guò)濾出部門(mén)平均工資高于整體平均工資的記錄,輸出結(jié)果將是符合條件的員工記錄
+--------+----------------+------------+---------------+ | emp_id | emp_name | emp_salary | department_id | +--------+----------------+------------+---------------+ | 3 | Bob Johnson | 75000.00 | 1 | | 4 | Alice Williams | 80000.00 | 2 | +--------+----------------+------------+---------------+
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Navicat for MySQL定時(shí)備份數(shù)據(jù)庫(kù)及數(shù)據(jù)恢復(fù)詳解
這篇文章主要介紹了Navicat for MySQL定時(shí)備份數(shù)據(jù)庫(kù)及數(shù)據(jù)恢復(fù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
mysql模糊查詢like與REGEXP的使用詳細(xì)介紹
每位程序員們應(yīng)該都知道,增刪改查是mysql最基本的功能,而其中查是最頻繁的操作,模糊查找是查詢中非常常見(jiàn)的操作,于是模糊查找成了必修課。下面這篇文章就給大家詳細(xì)介紹了mysql模糊查詢like與REGEXP的使用,有需要的朋友們可以參考學(xué)習(xí)。2016-12-12
mysql myisam 優(yōu)化設(shè)置設(shè)置
mysql myisam 優(yōu)化設(shè)置設(shè)置,需要的朋友可以參考下。2010-03-03
線上MYSQL同步報(bào)錯(cuò)故障處理方法總結(jié)(必看篇)
下面小編就為大家?guī)?lái)一篇線上MYSQL同步報(bào)錯(cuò)故障處理方法總結(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
MySL實(shí)現(xiàn)如等級(jí)成色等特殊順序的排序詳解
這篇文章主要為大家介紹了MySL實(shí)現(xiàn)如等級(jí)成色等特殊順序的排序詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
解決mysql數(shù)據(jù)庫(kù)數(shù)據(jù)遷移達(dá)夢(mèng)數(shù)據(jù)亂碼問(wèn)題
最近接手一個(gè)java項(xiàng)目,需要進(jìn)行重構(gòu),使用國(guó)產(chǎn)數(shù)據(jù)庫(kù)達(dá)夢(mèng)8替換mysql數(shù)據(jù)庫(kù)需要滿足這個(gè)要求,在遷移過(guò)程中遇到mysql數(shù)據(jù)庫(kù)數(shù)據(jù)遷移達(dá)夢(mèng)數(shù)據(jù)亂碼問(wèn)題,怎么解決呢,下面把過(guò)程分享給大家一起看看吧2021-08-08

