MySQL資料庫的分組操作,語句拼接,列轉行操作

2020-12-23 anyux1

大家好,我是anyux。本文介紹MySQL資料庫的分組操作,語句拼接,列轉行操作。

關於group by 的sql_mode

關於group by 的sql_mode

only_full_group_by

說明:僅是MySQL5.7中存在,5.6和8.0都沒有,查看sql_mode

select @@sql_mode;

在帶有group by 子句的select中,select後的條件列(非主鍵列),要麼是group by 後面的列,要麼需要在函數中

示例group by 錯誤

select user,host from mysql.user group by user;

報錯內容

ERROR 1055 (42000): Expression 2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mysql.user.Host' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解釋以上報錯 select 查詢的欄位不在 group by 子句中,並且未使用聚合函數包含'mysql.user.Host',這和sql_mode=only_full_group_by 不兼容 臨時關閉sql_mode

set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

永久關閉sql_mode 在/etc/my.cnf中找到[mysqld],粘貼以下內容,保存退出,重啟MySQL務

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

concat的使用

concat的使用

可以將多個列合併成一個列,做列值拼接

select concat(user,host) as 'user@host' from mysql.user;

group_concat的使用

group_concat的使用

可以做列轉行

use school;select cno as 學號, group_concat(score) as 成績總覽 from sc group by cno;

相關焦點

  • 資料庫基礎:mysql主從集群搭建
    還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的數據同時寫到備份的資料庫中。實現mysql資料庫的熱備份。 要想實現雙機的熱備,首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是作為從資料庫的數據版本可以高於主伺服器資料庫的版本,但是不可以低於主伺服器的資料庫版本。
  • mysql 矩陣類型專題及常見問題 - CSDN
    失敗回滾的操作事務,將不能對事務有任何影響。一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。隔離性是指當多個用戶並發訪問資料庫時,比如同時訪問一張表,資料庫每一個用戶開啟的事務,不能被其他事務所做的操作幹擾(也就是事務之間的隔離),多個並發事務之間,應當相互隔離。
  • 讓Python幫你搞定MySQL資料庫
    MySQL是常用的資料庫之一,也是面試工作必備技能之一。本文通過一個實戰,將Python與SQL語句結合起來使用,搞定MySQL資料庫。
  • 新手入門MYSQL資料庫命令大全
    一、命令行連接資料庫Windows作業系統進入CMD命令行,進入mysql.exe所在目錄,運行命令mysql.exe -h主機名 -u用戶名 -p密碼注意:參數名與值之間沒有空格 , 如:-h127.0.0.1二、資料庫命令1.
  • MySQL資料庫常用命令詳解
    除了用第三方軟體管理MySQL資料庫外,MySQL本身也提供了管理資料庫的操作命令,可以在CentOS終端直接使用MySQL命令,用於MySQL資料庫的創建、表的管理、SQL查詢等管理操作。從圖3-45可以看出,執行該命令後,終端窗口顯示了當前MySQL下有四個資料庫,分別是information_schema\mysql\performance_schema\sys\,這四個資料庫都是系統資料庫。
  • 一千行MySQL學習筆記
    而事務是暫時關閉「自動提交」機制,需要commit提交持久化數據操作。-- 注意    1. 數據定義語言(DDL)語句不能被回滾,比如創建或取消資料庫的語句,和創建、取消或更改表或存儲的子程序的語句。    2.
  • 面試不得不知的Mysql殺手鐧
    持久性(Durability):事務完成後,事務對資料庫的所有更新將被保存到資料庫,不能回滾。(redolog保證)理解MVCC、多版本並發控制innodb的MVCC,是通過在每行記錄後面保存兩個隱藏的列來實現的。這兩個列,一個是行的創建時間,一個保存行的過期時間。存儲的是系統版本號,不是真實的時間。每開始一個新的事務,系統版本號都會自動遞增。
  • 如何在ubuntu20.04安裝MySQL並修改資料庫密碼
    帳號debian-sys-maint,進行登錄8、進入資料庫後,輸入命令,查看資料庫show database;查看資料庫 show databases;9、使用資料庫mysql,用命令use mysql;
  • MySQL資料庫主從複製搭建
    本文介紹MySQL資料庫主從複製搭建。文末有主從複製步驟導圖資料庫批量初始化更多詳細操作,請參考之前的多實例的文章內容為保證數據的純淨,將資料庫中所有數據刪除,並重新初始化rm -rf /data/*' with grant option;flush privileges;"還原3306的配置文件mv /etc/my.cnf.bak /etc/my.cnf檢查資料庫實例狀態grep -E
  • mysql資料庫行列矩陣調換位置(行與列調換)
    工作上的需求:根據一個表(stu_bysjytj)的數據,矩陣調換位置(即列與行調換位置),並保存至資料庫的視圖中。表(stu_bysjytj)的數據結構如下:解決方案如下:以下是mysql資料庫的具體操作代碼:解釋:id、leibie、jiangong、yuanlin
  • MySQL拼接字符串,GROUP_CONCAT 值得擁有
    領導想要查看每個 performance 下都有誰,同時要求將這些人的名稱要逗號拼接成一個字符串,也就是說要得到下面的結果:要將結果集中某個指定的列進行字符串拼接,這要怎麼做呢?主角閃亮登場GROUP_CONCAT(expr)在 Mysql 官方文檔 中,該函數被放在聚合函數章節,如果你要按照指定欄位分組拼接,就要配合關鍵字GROUP BY來使用的定義該函數返回一個字符串結果,該字符串結果是通過分組串聯的非
  • MySQL教程之MySQL資料庫優化小建議
    ,但是帶來的負面效果是插入等操作資料庫都會去檢查約束(雖然可以手動設置忽略約束),這樣相當於把一些業務邏輯寫到了資料庫層,不便於維護。分庫分表儘量在資料庫設計初期敲定方案,否則後期會極大增加代碼複雜性而且不易更改。垂直分表是按照日期等外部變量進行分表,水平分表是按照表中的某些欄位關係,使用hash映射等分表。分庫分表的前提條件是在執行查詢語句之前,已經知道需要查詢的數據可能會落在哪一個分庫和哪一個分表中。優化查詢語句這個才是很多系統資料庫瓶頸的始作俑者。
  • MySQL何時執行flush privileges?
    上述語句執行成功後,MySQL會做兩件事情:會在mysql.user表中增加一條記錄。刪除用戶現在我們將用戶刪除掉,看下是否還可以登錄MySQL資料庫。刪除用戶的語句如下:dropuser'user1'@'172.19.
  • MySQL 工作、底層原理,看這一篇就夠了!
    Optimizer (查詢優化器)SQL語句在查詢之前會使用查詢優化器對查詢進行優化(產生多種執行計劃,最終資料庫會選擇最優化的方案去執行,儘快返會結果) 他使用的是「選取-投影-聯接」策略進行查詢。它根據MySql AB公司提供的文件訪問層的一個抽象接口來定製一種文件訪問機制(這種訪問機制就叫存儲引擎)SQL 語句執行過程資料庫通常不會被直接使用,而是由其他程式語言通過SQL語句調用mysql,由mysql處理並返回執行結果。那麼Mysql接受到SQL語句後,又是如何處理?
  • 2020 年資料庫高頻面試題|原力計劃
    5、MySQL有關權限的表都有哪幾個MySQL伺服器通過權限表來控制用戶對資料庫的訪問,權限表存放在mysql資料庫裡,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。
  • MySQL資料庫無完整備份刪庫,除了跑路還能怎麼辦?
    所以我們只能把dump文件恢復到本地資料庫。在ECS上建立一個mysql資料庫,然後就是dump文件恢復。mysqlbinlog --start-datetime=「2020-02-16 17:00:01」 --stop-datetime=「2020-02-20 17:00:00」 —database=xxxdb mysql-bin.000218 | mysql -f -u root xxxdb–database 指定了使用binlog中的哪個資料庫進行導入,否則,如果binlog中有多個庫的操作記錄
  • 一頓騷操作!我將 SQL 耗時從 30248.271s 優化到 0.001s
    場景  我用的資料庫是mysql5.6,下面簡單的介紹下場景  課程表  create table Course(  進行了查詢語句優化,先執行了where過濾,再執行連接操作,且都用到了索引。條件對表進行過濾,然後做表連接  (雖然mysql會對連表語句做優化)  4.建立合適的索引,必要時建立多列聯合索引  5.學會分析sql執行計劃,mysql會對sql進行優化,所以分析執行計劃很重要  索引優化  上面講到子查詢的優化,以及如何建立索引,而且在多個欄位索引時,分別對欄位建立了單個索引  後面發現其實建立聯合索引效率會更高
  • 第02篇:SQL資料庫的四種基本操作「增刪改查」
    操作資料庫使用的是SQL語言,其全稱:結構化查詢語言(Structured Query Language)。這是一門標準的計算機語言,用來訪問和操作資料庫系統。本章主要講解資料庫的常規基本操作,即:增(insert)、刪(delete)、改(update)、查(select)四種操作。其中,查詢的使用頻率最高且語法規則較多,是本章學習的重點和難點。
  • 「Mysql」資料庫主從搭建-基於docker
    :3306 --name mymysql -e MYSQL_ROOT_PASSWORD=000000 -d mysql:5.7創建Slave(從資料庫):docker run -p 3340:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=000000 -d mysql:5.7Master對外映射的埠是
  • 輕鬆搭建MySQL主從複製、讀寫分離(雙機熱備)
    因此,我們利用mysql自帶的REPLICATION來實現mysql多機熱備的功能,mysql版本為5.7進行演示。讀寫分離:就是把對資料庫的讀操作和寫操作分離開,將讀寫壓力分擔到多臺伺服器上,通常用於讀遠大於寫的場景。