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

Mysql之如何實現(xiàn)行列轉(zhuǎn)換

 更新時間:2023年06月15日 10:30:52   作者:藍天⊙白云  
這篇文章主要介紹了Mysql之如何實現(xiàn)行列轉(zhuǎn)換問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql數(shù)據(jù)庫如何實現(xiàn)行列轉(zhuǎn)換

1. 行轉(zhuǎn)列

方案一

select  name,
sum(case when course='java' then grade end) as java,
sum(case when course='C++' then grade end) as C++,
sum(case when course='C#' then grade end) as C#
from test group by name

方案二

select distinct c.`name` AS name,
(select grade from test where name = c.`name` and course = 'java' )as java,
(select grade from test where name = c.`name` and course = 'C++' )as C++,
(select grade from test where name = c.`name` and course = 'C#' )as C#
from test c

結(jié)合項目用到的sql:

select  MAIN_STATION_CODE_ as stationCode,
case when SUBSTR(PLAN_START_DATE_, 1, 10)=curdate() then STATION_ else "" end as firstDay,
case when SUBSTR(PLAN_START_DATE_, 1, 10)=DATE_SUB(curdate(),INTERVAL -1 DAY) then STATION_ else "" end as secondDay,
case when SUBSTR(PLAN_START_DATE_, 1, 10)=DATE_SUB(curdate(),INTERVAL -2 DAY) then STATION_ else "" end as thirdDay,
case when SUBSTR(PLAN_START_DATE_, 1, 10)=DATE_SUB(curdate(),INTERVAL -3 DAY) then STATION_ else "" end as fourthDay
from ps_overhaul_plan_row group by MAIN_STATION_CODE_

方案二拓展

上面我們是采用逐個判斷并拼接的方式來進行,那如果極端情況下,假如有成百上千個值需要判斷怎么辦?

這種情況下,能夠立即想到的是采用函數(shù)來拼接出對應的語句塊,再合并在一起執(zhí)行。

假如我們需要拼接下面一句:

(select GRADE_ FROM grade where name_ = c.name_ and course_ = ‘Math') as Math,

使用concat函數(shù)(例子):

select c.name_,concat('(SELECT grade_ from grade where name_=c.name_ ', 'and course_ =''', c.course_, '''', ') as ',c.course_, ')') from grade c

然后再次使用group_concat函數(shù)將多行轉(zhuǎn)為一行:

SELECT GROUP_CONCAT(distinct concat('(SELECT grade_ from grade where name_=c.name_ ', 'and course_ =''', c.course_, '''', ') as ',c.course_, ')')) from grade c

最后再使用存儲過程完成動態(tài)sql執(zhí)行。

方案三:帶匯總

select ifnull(uid,'Total') uid, uname,
sum(if(`course`='java',grade,0)) 'java',
sum(if(`course`='C++',grade,0)) 'C++',
sum(if(`course`='C#',grade,0)) 'C#',
sum(score) 'total'
from course
group by uid
with ROLLUP

方案四:使用group_concat函數(shù)

SELECT
    id,
    name,
    group_concat(CASE WHEN subject = 'Math' THEN score END SEPARATOR '') '數(shù)學',
    group_concat(CASE WHEN subject = 'English' THEN score END SEPARATOR '') '英語'
FROM test1
GROUP BY name;

2. 列轉(zhuǎn)行

原表:

實現(xiàn)SQL:

SELECT d.name_,'Math' AS subject,d.Math_ AS score FROM 
grade_column d
UNION ALL
SELECT d.name_, 'English' as SUBJECT,d.English_ as score from
grade_column d

列轉(zhuǎn)行效果如下:

說明:SELECT “hello” as subject from dual;作用是新添加列subject,并且列值為hello;

總結(jié)

行轉(zhuǎn)列原理:

CASE WHEN或IF,這兩種都是判斷條件,滿足條件的時候我們把它當做新的一列。

列轉(zhuǎn)行原理:

UNION或UNION ALL,這兩個都是把結(jié)果集合并起來,每次查詢學生名稱(基本列)和學科的其中一列的值,再把它們組合起來,這樣結(jié)果集就只有學生名稱和科目成績兩列了,這里多加了一列科目。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL關(guān)鍵字IN與EXISTS的使用與區(qū)別詳解

    MySQL關(guān)鍵字IN與EXISTS的使用與區(qū)別詳解

    in和exists是兩種常用的條件查詢關(guān)鍵字,兩種常用于子查詢,它們在某些情況下可以互換使用,但它們的工作方式和效率可能會有所不同,這篇文章主要給大家介紹了關(guān)于MySQL關(guān)鍵字IN與EXISTS的使用與區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • mysql jdbc連接步驟及常見參數(shù)

    mysql jdbc連接步驟及常見參數(shù)

    這篇文章主要介紹了mysql jdbc連接步驟及常見參數(shù),需要的朋友可以參考下
    2015-09-09
  • 有關(guān)mysql中ROW_COUNT()的小例子

    有關(guān)mysql中ROW_COUNT()的小例子

    mysql中的ROW_COUNT()可以返回前一個SQL進行UPDATE,DELETE,INSERT操作所影響的行數(shù)
    2013-02-02
  • MySQL實現(xiàn)字段的自定義排序的方法

    MySQL實現(xiàn)字段的自定義排序的方法

    一般情況下,我們排序都是直接利用 order by 字段 asc/desc;但是如果要排序的字段數(shù)據(jù)格式并不能直接實現(xiàn),或者說我們需要指定的順序且沒有什么規(guī)律,簡單的order by字段就實現(xiàn)不了,所以本文給大家介紹了MySQL實現(xiàn)字段的自定義排序的方法,需要的朋友可以參考下
    2024-04-04
  • Mysql DBA 20天速成教程

    Mysql DBA 20天速成教程

    準備一臺pc,一根網(wǎng)線和20天無打擾的空余時間,把MySQL 5.1參考手冊設置為瀏覽器首頁,按下面列表逐條學習即可,這本中文手冊包括基本上所有的內(nèi)容,補充知識google也都能查到,學習平臺采用linux
    2014-03-03
  • mysql 多個字段實現(xiàn)逗號拼接

    mysql 多個字段實現(xiàn)逗號拼接

    在MySQL數(shù)據(jù)庫中,有時候我們需要將多個字段的值連接在一起,本文主要介紹了mysql 多個字段實現(xiàn)逗號拼接,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 分享幾個簡單MySQL優(yōu)化小妙招

    分享幾個簡單MySQL優(yōu)化小妙招

    這篇文章主要介紹了分享幾個簡單MySQL優(yōu)化小妙招,分享內(nèi)容有、設置大小寫不敏感、MySql?的用戶和權(quán)限管理等內(nèi)容,需要的小伙伴可以參考一下,需要的朋友可以參考下
    2022-03-03
  • 解決MySQL登錄報錯1045-Access?denied?for?user?'root'@' '(using?password:YES)

    解決MySQL登錄報錯1045-Access?denied?for?user?'root'@

    這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報錯1045-Access?denied?for?user?‘root‘@‘‘(using?password:YES)的相關(guān)資料,文中一步步將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • Mysql事務索引知識匯總

    Mysql事務索引知識匯總

    這篇文章主要介紹了Mysql事務索引知識匯總,mysql事務是用于處理操作量大、復雜性高的數(shù)據(jù),索引能加快數(shù)據(jù)庫的查詢速度并高效獲取指定的數(shù)據(jù),下文相關(guān)詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • MySQL存儲IP地址的三種方法

    MySQL存儲IP地址的三種方法

    在MySQL中,存儲IP地址通常有幾種推薦的方法,每種方法都有其優(yōu)缺點,可以根據(jù)具體需求選擇合適的方式,本文給大家介紹了MySQL存儲IP地址的三種方法:使用VARCHAR類型,使用INT類型存儲IPv4和使用BINARY(16)或VARBINARY(16)存儲IPv6,需要的朋友可以參考下
    2024-07-07

最新評論