真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql中怎么進(jìn)行分組 952÷37

技術(shù)分享 | MySQL 分組需求探秘

前兩天同事有個(gè) MySQL 數(shù)據(jù)分組的需求,如下測(cè)試數(shù)據(jù),需要找出每個(gè) name 分組中 create_date 最近的記錄:

創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站、網(wǎng)站重做改版、翼城網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、購(gòu)物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為翼城等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

需要注意的是,此處用的 MySQL 是5.6,最初是使用這條語(yǔ)句:

pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;" select name, value, create_date, update_date from t1 group by name order by create_date desc; /pre

用這條 SQL 得到的其實(shí)只是每個(gè) name 分組中最先插入的記錄,然后按照 create_date 進(jìn)行了降序排列,和原始需求,完全不同。

此時(shí)可采用分而治之的策略,先做排序,再做分組:

pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;" select * from (select name, value, create_date, update_date from t1 order by create_date desc) t group by t.name; /pre

當(dāng)然,針對(duì)此需求,可能有其他方法,有興趣的朋友,可以嘗試寫寫,共享一下。

可能有細(xì)心的朋友會(huì)發(fā)現(xiàn)個(gè)問題,就是上述 SQL 中的 group by ,好像有些奇怪,如果按照常規(guī),select 中的字段需要出現(xiàn)在 group by 中,上述語(yǔ)句竟然沒報(bào)錯(cuò)?

如果我們?cè)?MySQL 5.7 執(zhí)行相同的語(yǔ)句:

pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;" select name, value, create_date, update_date from t1 group by name order by create_date desc; /pre

因此從5.6升級(jí)到5.7,很可能出現(xiàn)這種相同的 SQL 執(zhí)行結(jié)果不同的現(xiàn)象,這對(duì)兼容性測(cè)試的要求就會(huì)很高,究其原因,一方面是特性決定的,另一方面就是各種配置參數(shù)不同導(dǎo)致的。

可以在5.7的 sql_mode 中刪除這個(gè) ONLY_FULL_GROUP_BY ,即可達(dá)到5.6相同效果了,或者改寫 SQL ,例如:

pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;" select * from t1 a where create_date = (select max(create_date) from t1 b where a.name = b.name); /pre

或者,

pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;" select * from t1 a where not exists (select * from t1 b where a.name = b.name and b.create_date a.create_date); /pre

MySQL 8.0支持 row_number()函數(shù),操作應(yīng)該和如下 Oracle 相近的。

Oracle 中可以使用 row_number()實(shí)現(xiàn)此需求:

pre class="custom" data-tool="mdnice編輯器" style="margin-top: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: rgba(0, 0, 0, 0.55) 0px 2px 10px;" select * from (select name, create_date, row_number() over (partition by name order by create_date desc) as r from t1) where r=1; /pre

Mysql語(yǔ)法之分組數(shù)據(jù)

如何分組數(shù)據(jù),以便能匯總表內(nèi)容的子集。這涉及兩個(gè)新SELECT語(yǔ)句子句,分別是GROUP BY子句和HAVING子句。

分組允許把數(shù)據(jù)分為多個(gè)邏輯組,以便能對(duì)每個(gè)組進(jìn)行聚集計(jì)算。

分組是在SELECT語(yǔ)句的GROUP BY 子句中建立的。

來(lái)看例子理解:

mysqlselect vend_id,COUNT(*) AS num_prods from products group by vend_id;

也就是不同的Id的商品總數(shù)都能分別查出來(lái)。

除了能用GROUP BY分組數(shù)據(jù)外,Mysql還允許過濾分組,規(guī)定包括哪些分組,排除哪些分組。

也就是HAVING子句。

mysqlselect cust_id,COUNT( /) AS orders from orders uGROUP BY/u cust_id uHAVING/u COUNT( /) =2;

注意:這里HAVING換成WHERE是不管用的。HAVING針對(duì)于分組。

WHERE在數(shù)據(jù)分組前進(jìn)行過濾,HAVING在數(shù)據(jù)分組后進(jìn)行過濾。

那么咱么看看怎么混合WHERE和HAVING。

mysqlselect vend_id, COUNT( / ) AS num_prods from products uwhere prod_price=10 group by/u vend_id HAVING COUNT( /) =2;

mysqlselect order_num,SUM(quantity*item_price) AS ordertotal

from orderitems

GROUP BY order_num

HAVING SUM(quantity*item_price) =50

order by ordertotal;

MySQL分組、排序

上一篇聚合函數(shù)末尾處使用了GROUP BY,但沒有做具體的介紹,這一篇就主要介紹一下GROUP BY的使用方法。順便介紹一下對(duì)分組查詢的過濾關(guān)鍵詞HAVING的用法。

在MySQL中,GROUP BY關(guān)鍵詞可以根據(jù)一個(gè)或多個(gè)字段對(duì)查詢結(jié)果進(jìn)行分組,類似于Excel中的數(shù)據(jù)透視表??梢詥为?dú)使用,但一般情況下都是結(jié)合聚合函數(shù)來(lái)使用的。

語(yǔ)法格式如下:

下面演示都是基于這一張簡(jiǎn)單的省份對(duì)應(yīng)大區(qū)的表格。

【單獨(dú)使用GROUP BY】

單獨(dú)使用GROUP BY關(guān)鍵字時(shí),查詢結(jié)果會(huì)只顯示每個(gè)分組的第一條記錄。

根據(jù)省份表里面的大區(qū)進(jìn)行聚合,查詢?nèi)珖?guó)共分成了幾個(gè)大區(qū),SQL語(yǔ)句如下↓

【GROUP BY結(jié)合聚合函數(shù)】

5個(gè)聚合函數(shù)上一篇已經(jīng)詳細(xì)介紹了用法,GROUP BY和聚合函數(shù)結(jié)合使用也是最頻繁的,下面就繼續(xù)使用省份表來(lái)求每個(gè)大區(qū)有多少個(gè)省份,對(duì)應(yīng)的聚合函數(shù)就是COUNT函數(shù),SQL語(yǔ)句如下↓

【GROUP BY結(jié)合GROUP_CONCAT】

這還是一個(gè)很有用的功能,GROUP_CONCAT() 函數(shù)會(huì)把每個(gè)分組的字段值都合并成一行顯示出來(lái)。

下面繼續(xù)使用省份表,把每個(gè)大區(qū)對(duì)應(yīng)的省份放在一行展示,用分號(hào)分開,SQL語(yǔ)句如下↓

【GROUP BY結(jié)合WITH ROLLUP】

WITH POLLUP關(guān)鍵詞用來(lái)在所有記錄的最后加上一條記錄,這條記錄是上面所有記錄的總和,SQL語(yǔ)句如下↓

【GROUP BY結(jié)合HAVING】

在MySQL中,可以使用HAVING關(guān)鍵字對(duì)分組后的數(shù)據(jù)進(jìn)行過濾。

使用 HAVING 關(guān)鍵字的語(yǔ)法格式如下:

HAVING關(guān)鍵詞和WHERE關(guān)鍵詞都可以用來(lái)過濾數(shù)據(jù),且HAVING支持WHERE關(guān)鍵詞中所有的操作符和語(yǔ)法。但是WHERE和HAVING關(guān)鍵字也存在以下幾點(diǎn)差異:

下面篩選一下省份數(shù)量在7個(gè)及以上的大區(qū),SQL語(yǔ)句如下↓

【GROUP BY結(jié)合ORDER BY】

聚合后的數(shù)據(jù),一半情況下也是需要進(jìn)行排序的,通過ORDER BY對(duì)聚合查詢結(jié)果進(jìn)行排序,對(duì)省份數(shù)量按從大到小進(jìn)行排序,SQL語(yǔ)句如下↓

End

◆ PowerBI開場(chǎng)白

◆ Python高德地圖可視化

◆ Python不規(guī)則條形圖

MySQL 怎樣分組查詢

MySQL GROUP BY 子句

GROUP BY 語(yǔ)句根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組。在分組的列上我們可以使用 COUNT, SUM, AVG,等函數(shù)。

具體語(yǔ)法參考:

from 樹懶學(xué)堂 - 一站式數(shù)據(jù)知識(shí)平臺(tái)


網(wǎng)頁(yè)題目:mysql中怎么進(jìn)行分組 952÷37
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/dddghho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部