mysql

在三山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,三山網(wǎng)站建設(shè)費用合理。
與
oracle
中分組、聚合函數(shù)的區(qū)別!
今天需要這樣一句
sql
:先用
group by
進行分組,然后利用聚合函數(shù)
count
或者
sum
進行計算,并顯示
其它的輔助信息。
在
mysql
環(huán)境中,我模擬如下環(huán)境:
CREATE TABLE `room` (
`rid` varchar(5) default NULL,
`rname` varchar(5) default NULL,
`pid` int(11) default NULL,
`seq` int(11) NOT NULL auto_increment,
PRIMARY KEY
(`seq`)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8
房間表,
seq
房間入住序號
(主鍵)
,
rname
為房間名,這里不考慮第三范式
情景:人住房間,
統(tǒng)計某個房間某個人住的次數(shù)
用戶表,客人的信息
CREATE TABLE `user1` (
`ID` int(11) NOT NULL auto_increment,
`USERNAME` varchar(50) default '',
`PASSWORD` varchar(50) default '',
PRIMARY KEY
(`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
Mysql
中語句如下:
select count(u.username)
,
r.rname
,r.rid,r.pid
from room r,user1 u
where r.pid=u.id
group by r.rid,r.pid
這里
r.rname
并沒有出現(xiàn)在
group by
子句、聚合函數(shù)中,但是
MYSQL
中仍然能夠執(zhí)行、列
出數(shù)據(jù)。
但是,在
ORACLE
中,卻不能!
!
!
!
Oracle
環(huán)境中:
/*
--
顯示:
Ora-00979 not a ORDER BY expression
--
因為:
order by
后邊的
c.channel_code
不在
ORDER BY
子句中
select count(c.channel_name),m.media_name
from channel c,media m
where c.media_code = m.media_code
group by c.media_code,m.media_name
order by
c.channel_code
--
顯示:
Ora-00979 not a GROUP BY expression
--
因為:
group by
或者聚合函數(shù)中沒有包含
c.channel_name
select count(c.channel_name),m.media_name,
c.channel_name
from channel c,media m
MySQL中使用 GROUP BY 對數(shù)據(jù)進行分組,GROUP BY從字面意義上理解就是根據(jù)'BY'指定的規(guī)則對數(shù)據(jù)進行分組, 所謂分組就是將一個'數(shù)據(jù)集'劃分成若干個'子區(qū)域',然后針對若干個'小區(qū)域'進行數(shù)據(jù)處理 。基本語法形式為:
字段值為進行分組時所依據(jù)的列名稱, “HAVING 條件表達式” 指定滿足表達式限定條件的結(jié)果將被顯示。
GROUP BY關(guān)鍵字通常和集合函數(shù)一起使用,例如:MAX()、MIN()、COUNT()、SUM()、AVG()。即把數(shù)據(jù)分為多個邏輯組,并對每個組進行集合計算。
WHERE 子句過濾行,在數(shù)據(jù)分組前過濾;HAVING 子句過濾分組,在數(shù)據(jù)分組后過濾。WHERE排除的行不包括在分組里,且HAVING支持所有WHERE操作符。
使用GROUP BY可以對多個字段進行分組,根據(jù)多字段的值來進行層次分組,分組從左到右。
注意事項:
查詢每門科目的前3名。
對于查詢的結(jié)果,一般有兩種情況。
表所有數(shù)據(jù)為:
情況1:對于分數(shù)相同的人,其后面的人 緊跟著名次排,直到排夠名次3,就不再往后取了。
情況2:對于分數(shù)相同的人,若當前相同名次的人數(shù)大于或等于 3, 則相同分數(shù)其后面的人不再參于top3了。
在情況2中 ,為什么”李四 - java“ 這行沒有了呢?
可以這樣理解,在情況2中相當于使用了 名次空缺 , 分數(shù)相同的人其后面那個人,的名次為 前面的人數(shù)+1 , 這里的 ”李四-java“這行,他的名次應(yīng)當是 5 , 所有top3自然取不到 ”李四-java“這行。
情況2和情況 寫法都是對應(yīng)的, 需要注意的是 并列名次,后面的人 是否需要保持名次空缺。那么統(tǒng)計的時候就需要根據(jù)情況去重。
參考鏈接:
上一篇聚合函數(shù)末尾處使用了GROUP BY,但沒有做具體的介紹,這一篇就主要介紹一下GROUP BY的使用方法。順便介紹一下對分組查詢的過濾關(guān)鍵詞HAVING的用法。
在MySQL中,GROUP BY關(guān)鍵詞可以根據(jù)一個或多個字段對查詢結(jié)果進行分組,類似于Excel中的數(shù)據(jù)透視表。可以單獨使用,但一般情況下都是結(jié)合聚合函數(shù)來使用的。
語法格式如下:
下面演示都是基于這一張簡單的省份對應(yīng)大區(qū)的表格。
【單獨使用GROUP BY】
單獨使用GROUP BY關(guān)鍵字時,查詢結(jié)果會只顯示每個分組的第一條記錄。
根據(jù)省份表里面的大區(qū)進行聚合,查詢?nèi)珖卜殖闪藥讉€大區(qū),SQL語句如下↓
【GROUP BY結(jié)合聚合函數(shù)】
5個聚合函數(shù)上一篇已經(jīng)詳細介紹了用法,GROUP BY和聚合函數(shù)結(jié)合使用也是最頻繁的,下面就繼續(xù)使用省份表來求每個大區(qū)有多少個省份,對應(yīng)的聚合函數(shù)就是COUNT函數(shù),SQL語句如下↓
【GROUP BY結(jié)合GROUP_CONCAT】
這還是一個很有用的功能,GROUP_CONCAT() 函數(shù)會把每個分組的字段值都合并成一行顯示出來。
下面繼續(xù)使用省份表,把每個大區(qū)對應(yīng)的省份放在一行展示,用分號分開,SQL語句如下↓
【GROUP BY結(jié)合WITH ROLLUP】
WITH POLLUP關(guān)鍵詞用來在所有記錄的最后加上一條記錄,這條記錄是上面所有記錄的總和,SQL語句如下↓
【GROUP BY結(jié)合HAVING】
在MySQL中,可以使用HAVING關(guān)鍵字對分組后的數(shù)據(jù)進行過濾。
使用 HAVING 關(guān)鍵字的語法格式如下:
HAVING關(guān)鍵詞和WHERE關(guān)鍵詞都可以用來過濾數(shù)據(jù),且HAVING支持WHERE關(guān)鍵詞中所有的操作符和語法。但是WHERE和HAVING關(guān)鍵字也存在以下幾點差異:
下面篩選一下省份數(shù)量在7個及以上的大區(qū),SQL語句如下↓
【GROUP BY結(jié)合ORDER BY】
聚合后的數(shù)據(jù),一半情況下也是需要進行排序的,通過ORDER BY對聚合查詢結(jié)果進行排序,對省份數(shù)量按從大到小進行排序,SQL語句如下↓
End
◆ PowerBI開場白
◆ Python高德地圖可視化
◆ Python不規(guī)則條形圖
需要準備的工具:電腦,sql數(shù)據(jù)庫。
1、首先新建一個test表,有id,name,second三個字段,其中name字段有重復(fù)數(shù)據(jù)。
2、輸入“select name,max(second) from test group by name”語句,點擊運行。
3、可以看到已經(jīng)查詢出按name分組后取出的second最大的一條記錄。
4、以輸入“select name,max(second) from test group by name order by max(second) desc”語句,按分組后second最大值進行降序。
5、如果想查詢mysql分組后最小的一條記錄,輸入“select name,min(second) from test group by name”語句,點擊運行即可。
SQL1中查詢出全部記錄,并且根據(jù)id和created_at拼接為新的字段k,在SQL2中過濾出符合條件的記錄,并且根據(jù)id和created_at拼接為新的字段;最后在SQL3中,根據(jù)字段k去查詢過濾出符合條件的記錄。
結(jié)果如下(共有31條記錄,其中有幾個需要過濾):
網(wǎng)站欄目:mysql分組怎么查詢 mysql數(shù)據(jù)庫分組查詢語句
轉(zhuǎn)載來源:http://chinadenli.net/article40/dooigeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、響應(yīng)式網(wǎng)站、網(wǎng)站制作、建站公司、網(wǎng)站收錄、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)