mysql邏輯分組列和行 mysql邏輯分組行轉列

2021-10-18 08:18:45 字數 1446 閱讀 9598

表名(row_to_column)

表結構如下:

sql直接查詢即可得如上結果:select * from row_to_column

要達到查詢效果如下結構:

正解sql如下即可:

select name as "姓名",

max(case subject when "數學" then score  end ) as "數學",

max(case subject when "語文" then score  end ) as "語文",

max(case subject when "英語" then score  end ) as "英語"

from row_to_column group by name

如果sql直接寫成如下,則會出現很多null

故進而可以根據姓名分組取每科最大的值,剛好每科最大的就是其真實分數,

如下sql試錯:

(個人理解)根據name分組,則name相同的只應該顯示一行,但是有可能name相同的存在有多行,mysql就不知道該顯示哪行了,就報錯了。因為正解sql裡面使用了max聚合函式,可以做到name相同的只顯示一行,就不會報錯了

擴充套件:mysql官網對group by的解說:

如果使用了group by ,select的字段必須是group by的字段,否則查詢在標準sql-92中是非法的

主要是sql模式啟用了only_full_group_by ,預設是啟用的,臨時關閉only_full_group_by方法如下:

select @@sql_mode;--先查詢出來,然後把查詢出來的字串去掉only_full_group_by再賦值回去

set @@global.sql_mode='';

set sql_mode ='strict_trans_tables,no_zero_in_date,no_zero_date,error_for_division_by_zero,no_engine_substitution';

此時就可以查詢非group by的字段了

如上圖所示:關閉only_full_group_by 模式後,根據name分組查詢,name相同的存在多行,,查詢結果只顯示每個分組的第一行

mysql列邊行 mysql 行轉列 列轉行

group concat 函式說明 手冊上說明 該函式返回帶有來自乙個組的連線的非null值的字串結果 通俗點理解,其實是這樣的 group concat 會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要返回哪些列,由函式引數 就是欄位名 決定。分組必須有個標準,就是根據group by指定的列...

邏輯行和物理行

物理行是你在編寫程式時所 看見 的。邏輯行是python 看見 的單個語句。python假定每個 物理行 對應一 個 邏輯行 邏輯行的例子如print hello world 這樣的語句 如果它本身就是一行 就像你在編輯器中看到的那樣 那麼它也是乙個物理行。預設地,python希望每行都只使用乙個語...

MySql列轉為行

前一天,在技術群有人提出乙個問題,如下圖所示 問第七題該這麼做?我研究了大概20分鐘左右,這是很典型的將列轉為行的sql。以下是主要步驟 第一步,我建立了表sales drop table ifexists sales create table sales year int 255 default ...