最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql中over partition by的具體使用

 更新時間:2024年02月23日 11:51:03   作者:mob64ca12e2f123  
在數(shù)據(jù)庫中,我們經(jīng)常需要對數(shù)據(jù)進行分組排序等操作,MySQL的over partition by可以幫助我們更方便地進行這些操作,本文主要介紹了mysql中over partition by的具體使用,感興趣的可以了解一下

前言

開發(fā)中遇到了這樣一個需求:統(tǒng)計商品庫存,產(chǎn)品ID + 子產(chǎn)品名稱都相同時,可以確定是同一款商品。當(dāng)商品來自不同的渠道時,我們要統(tǒng)計每個渠道中最大的那一個。如果在Oracle中可以通過分析函數(shù) OVER(PARTITION BY… ORDER BY…)來實現(xiàn)。在MySQL中應(yīng)該怎么來實現(xiàn)呢?,F(xiàn)在通過兩種簡單的方式來實現(xiàn)這一需求。

數(shù)據(jù)準(zhǔn)備

/*Table structure for table `product_stock` */
CREATE TABLE `product_stock` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `product_id` varchar(10) DEFAULT NULL COMMENT '產(chǎn)品ID',
  `channel_type` int(11) DEFAULT NULL COMMENT '渠道類型',
  `branch` varchar(10) DEFAULT NULL COMMENT '子產(chǎn)品',
  `stock` int(11) DEFAULT NULL COMMENT '庫存',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8;

/*Data for the table `product_stock` */

insert  into `product_stock`
(`id`,`product_id`,`channel_type`,`branch`,`stock`) 
values (1,'P002',1,'豪華房',23),
(2,'P001',1,'高級標(biāo)間',45),
(3,'P003',1,'高級標(biāo)間',33),
(4,'P004',1,'經(jīng)典房',65),
(5,'P003',1,'小型套房',45),
(6,'P002',2,'高級標(biāo)間',331),
(7,'P005',2,'小型套房',223),
(8,'P001',1,'豪華房',99),
(9,'P002',3,'高級標(biāo)間',65),
(10,'P003',2,'經(jīng)典房',45),
(11,'P004',3,'標(biāo)準(zhǔn)雙床房',67),
(12,'P005',2,'小型套房',34),
(13,'P001',1,'高級標(biāo)間',43),
(14,'P002',3,'豪華房',56),
(15,'P001',3,'高級標(biāo)間',77),
(16,'P005',2,'經(jīng)典房',67),
(17,'P003',2,'高級標(biāo)間',98),
(18,'P002',3,'經(jīng)典房',23),
(19,'P004',2,'經(jīng)典房',76),
(20,'P002',1,'小型套房',123);

通過分組聚合GROUP_CONCAT實現(xiàn)

SELECT
  product_id,
  branch,
  GROUP_CONCAT(t.stock ORDER BY t.stock DESC ) stocks
FROM (SELECT *
      FROM product_stock) t
GROUP BY product_id,branch

查詢結(jié)果:

product_idbranchstocks
P001豪華房99
P001高級標(biāo)間77,45,43
P002小型套房123
P002經(jīng)典房23
P002豪華房56,23
P002高級標(biāo)間331,65
P003小型套房45
P003經(jīng)典房45
P003高級標(biāo)間98,33
P004標(biāo)準(zhǔn)雙床房67
P004經(jīng)典房76,65
P005小型套房223,34
P005經(jīng)典房67

這也許并不是我們想要的結(jié)果,我們只要stocks中的最大值就可以,那么我們只要用SUBSTRING_INDEX函數(shù)截取一下就可以:

SELECT
  product_id,
  branch,
  SUBSTRING_INDEX(GROUP_CONCAT(t.stock ORDER BY t.stock DESC ),',',1) stock
FROM (SELECT *
      FROM product_stock) t
GROUP BY product_id,branch

查詢結(jié)果:

product_idbranchstock
P001豪華房99
P001高級標(biāo)間77
P002小型套房123
P002經(jīng)典房23
P002豪華房56
P002高級標(biāo)間331
P003小型套房45
P003經(jīng)典房45
P003高級標(biāo)間98
P004標(biāo)準(zhǔn)雙床房67
P004經(jīng)典房76
P005小型套房223
P005經(jīng)典房67

通過關(guān)聯(lián)查詢及COUNT函數(shù)實現(xiàn)

SELECT *
FROM (SELECT
        t.product_id,
        t.branch,
        t.stock,
        COUNT(*)     AS rank
      FROM product_stock t
        LEFT JOIN product_stock r
          ON t.product_id = r.product_id
            AND t.branch = r.branch
            AND t.stock <= r.stock
      GROUP BY t.id) s
WHERE s.rank = 1

查詢結(jié)果:

product_idbranchstockrank
P003小型套房451
P002高級標(biāo)間3311
P005小型套房2231
P001豪華房991
P003經(jīng)典房451
P004標(biāo)準(zhǔn)雙床房671
P002豪華房561
P001高級標(biāo)間771
P005經(jīng)典房671
P003高級標(biāo)間981
P002經(jīng)典房231
P004經(jīng)典房761
P002小型套房1231

通過關(guān)聯(lián)表本身,聯(lián)接條件中:t.stock <= r.stock,當(dāng)t.stock = r.stock時,COUNT出來的數(shù)量是1,當(dāng)t.stock < r.stock時,COUNT出來的數(shù)量2,3,4…由此可以給所有的數(shù)據(jù)根據(jù)stock字段做一個排序,而這個排序中所有為1的,就是我們所需求的數(shù)據(jù),然后通過按id分組,得到結(jié)果。通過這種方式,也可以實現(xiàn)上面的需求。

到此這篇關(guān)于mysql中over partition by的具體使用的文章就介紹到這了,更多相關(guān)mysql over partition by內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySql 查詢優(yōu)化器(Optimizer)解析

    MySql 查詢優(yōu)化器(Optimizer)解析

    MySQL查詢優(yōu)化器(Optimizer)是數(shù)據(jù)庫內(nèi)核中最核心的模塊,它通過分析SQL語句、表統(tǒng)計信息和索引,生成最優(yōu)的執(zhí)行計劃以提高查詢效率,本文給大家介紹MySql 查詢優(yōu)化器(Optimizer)的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • mysql解壓包的安裝基礎(chǔ)教程

    mysql解壓包的安裝基礎(chǔ)教程

    這篇文章主要為大家詳細(xì)介紹了mysql解壓包的安裝基礎(chǔ)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法

    MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法

    這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • MySql索引原理和SQL優(yōu)化方式

    MySql索引原理和SQL優(yōu)化方式

    索引是提升數(shù)據(jù)庫查詢效率的有序存儲結(jié)構(gòu),包括主鍵索引、唯一索引、普通索引等,約束則用于數(shù)據(jù)完整性,包含主鍵、唯一、外鍵等約束,B+樹是常用的索引結(jié)構(gòu),減少磁盤IO次數(shù),索引應(yīng)用場景包括where、groupby、orderby
    2024-09-09
  • CentOS 6.5下yum安裝 MySQL-5.5全過程圖文教程

    CentOS 6.5下yum安裝 MySQL-5.5全過程圖文教程

    在linux安裝mysql是一個困難的事情,yum安裝一般是安裝的mysql5.1,現(xiàn)在經(jīng)過自己不懈努力終于能用yum安裝mysql5.5了。下面通過兩種方法給大家介紹CentOS 6.5下yum安裝 MySQL-5.5全過程,一起學(xué)習(xí)吧
    2016-05-05
  • 解決MySQL深度分頁的問題

    解決MySQL深度分頁的問題

    本文主要介紹了解決MySQL深度分頁的問題,深度分頁可以有效提高深度分頁的查詢性能,優(yōu)化策略需要根據(jù)具體場景進行選擇,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 快速修改mysql密碼的四種方法示例詳解

    快速修改mysql密碼的四種方法示例詳解

    mysql密碼忘記怎么辦,如何快速修改mysql密碼,下面給大家?guī)硭姆N方法快速修改mysql密碼,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • Mysql字符串字段判斷是否包含某個字符串的2種方法

    Mysql字符串字段判斷是否包含某個字符串的2種方法

    這篇文章主要介紹了Mysql字符串字段判斷是否包含某個字符串的2種方法,本文使用Like和find_in_set兩種方法實現(xiàn),需要的朋友可以參考下
    2015-01-01
  • 解決當(dāng)MySQL數(shù)據(jù)庫遇到Syn Flooding問題

    解決當(dāng)MySQL數(shù)據(jù)庫遇到Syn Flooding問題

    Syn攻擊常見于應(yīng)用服務(wù)器,而數(shù)據(jù)庫服務(wù)器在內(nèi)網(wǎng)中,應(yīng)該很難碰到類似的攻擊,這篇文章主要介紹了當(dāng)MySQL數(shù)據(jù)庫遇到Syn Flooding問題 ,需要的朋友可以參考下
    2019-06-06
  • MySQL中的聚合查詢和聯(lián)合查詢操作代碼

    MySQL中的聚合查詢和聯(lián)合查詢操作代碼

    這篇文章主要介紹了MySQL中的聚合查詢和聯(lián)合查詢操作代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論

札达县| 普定县| 沂源县| 武定县| 电白县| 来宾市| 乌海市| 宜州市| 望都县| 昌江| 北碚区| 犍为县| 怀来县| 开鲁县| 珠海市| 刚察县| 万安县| 衡阳市| 福鼎市| 奈曼旗| 罗城| 平南县| 和林格尔县| 厦门市| 天镇县| 东阿县| 顺昌县| 治多县| 金堂县| 喀喇| 石棉县| 昌黎县| 嘉义县| 阿勒泰市| 赤峰市| 墨玉县| 白河县| 古蔺县| 静乐县| 达孜县| 高青县|