精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

高逼格的SQL寫法:行行比較

Android編程精選 ? 來源:Android編程精選 ? 2023-05-12 10:51 ? 次閱讀


環境準備

數據庫版本:MySQL 5.7.20-log

1b46ab4a-f06e-11ed-90ce-dac502259ad0.png

圖片

建表 SQL

DROPTABLEIFEXISTS`t_ware_sale_statistics`;
CREATETABLE`t_ware_sale_statistics`(
`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主鍵id',
`business_id`bigint(20)NOTNULLCOMMENT'業務機構編碼',
`ware_inside_code`bigint(20)NOTNULLCOMMENT'商品自編碼',
`weight_sale_cnt_day`double(16,4)DEFAULTNULLCOMMENT'平均日銷量',
`last_thirty_days_sales`double(16,4)DEFAULTNULLCOMMENT'最近30天銷量',
`last_sixty_days_sales`double(16,4)DEFAULTNULLCOMMENT'最近60天銷量',
`last_ninety_days_sales`double(16,4)DEFAULTNULLCOMMENT'最近90天銷量',
`same_period_sale_qty_thirty`double(16,4)DEFAULTNULLCOMMENT'去年同期30天銷量',`same_period_sale_qty_sixty`double(16,4)DEFAULTNULLCOMMENT'去年同期60天銷量',`same_period_sale_qty_ninety`double(16,4)DEFAULTNULLCOMMENT'去年同期90天銷量',
`create_user`bigint(20)DEFAULTNULLCOMMENT'創建人',
`create_time`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'創建時間',
`modify_user`bigint(20)DEFAULTNULLCOMMENT'最終修改人',
`modify_time`datetimeNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT'最終修改時間',`is_delete`tinyint(2)DEFAULT'2'COMMENT'是否刪除,1:是,2:否',
PRIMARYKEY(`id`)USINGBTREE,
KEY`idx_business_ware`(`business_id`,`ware_inside_code`)USINGBTREE
)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4ROW_FORMAT=DYNAMICCOMMENT='商品銷售統計';

1b5575d0-f06e-11ed-90ce-dac502259ad0.png

圖片

初始化數據

準備了 769063 條數據

1b6e858e-f06e-11ed-90ce-dac502259ad0.png

圖片

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

需求背景

業務機構下銷售商品,同個業務機構可以銷售不同的商品,同個商品可以在不同的業務機構銷售,也就說:業務機構與商品是多對多的關系

假設現在有 n 個機構,每個機構下有幾個商品,如何查詢出這幾個門店下各自商品的銷售情況?

具體點,類似如下

1b7edda8-f06e-11ed-90ce-dac502259ad0.png

圖片

如何查出 100001 下商品 1000、1001、1003 、 100002 下商品 1003、1004 、 100003 下商品 1006、1008、1009 的銷售情況

相當于是雙層列表(業務機構列表中套商品列表)的查詢;業務機構列表和商品列表都不是固定的,而是動態的

那么問題就是:如何查詢多個業務機構下,某些商品的銷售情況

(問題經我一描述,可能更模糊了,大家明白意思了就好!)

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

循環查詢

這個很容易想到,在代碼層面循環業務機構列表,每個業務機構查一次數據庫,偽代碼如下:

1b91565e-f06e-11ed-90ce-dac502259ad0.png

圖片

具體的 SQL 類似如下

1ba3410c-f06e-11ed-90ce-dac502259ad0.png

圖片

SQL 能走索引

1bb7f912-f06e-11ed-90ce-dac502259ad0.png

圖片

實現簡單,也好理解,SQL 也能走索引,一切看起來似乎很完美

然而現實是:部門開發規范約束,不能循環查數據庫

哦豁,這種方式只能放棄,另尋其他方式了

OR 拼接

通過 MyBatis 的 動態 SQL 功能,進行 SQL 拼接,類似如下

1bcdfd2a-f06e-11ed-90ce-dac502259ad0.png

圖片

具體的 SQL 類似如下

1be97366-f06e-11ed-90ce-dac502259ad0.png

圖片

SQL 也能走索引

1c023310-f06e-11ed-90ce-dac502259ad0.png

圖片

實現簡單,也好理解,SQL 也能走索引,而且只查詢一次數據庫,貌似可行

唯一可惜的是:有點費 OR,如果業務機構比較多,那 SQL 會比較長

作為候選人之一吧,我們接著往下看

混查過濾

同樣是利用 Mybatis 的 動態 SQL ,將 business_id 列表拼在一起、 ware_inside_code 拼在一起,類似如下

1c1a44dc-f06e-11ed-90ce-dac502259ad0.png

圖片

具體的 SQL 類似如下

1c30de0e-f06e-11ed-90ce-dac502259ad0.png

圖片

SQL 也能走索引

1c44bdc0-f06e-11ed-90ce-dac502259ad0.png

圖片

實現簡單,也好理解,SQL 也能走索引,而且只查詢一次數據庫,似乎可行

但是:查出來的結果集大于等于我們想要的結果集,你品,你細品!

所以還需要對查出來的結果集進行一次過濾,過濾出我們想要的結果集

姑且也作為候選人之一吧,我們繼續往下看

行行比較

SQL-92 中加入了行與行比較的功能,這樣一來,比較謂詞 = 、< 、> 和 IN 謂詞的參數就不再只是標量值了,還可以是值列表了

當然,還是得用到 Mybatis 的 動態 SQL ,類似如下

1c5a651c-f06e-11ed-90ce-dac502259ad0.png

圖片

具體的 SQL 類似如下

1c6f9bda-f06e-11ed-90ce-dac502259ad0.png

圖片

SQL 同樣能走索引

1c85a196-f06e-11ed-90ce-dac502259ad0.png

圖片

實現簡單,SQL 也能走索引,而且只查詢一次數據庫,感覺可行

只是:有點不好理解,因為我們平時這么用的少,所以這種寫法看起來很陌生

另外,行行比較是 SQL 規范,不是某個關系型數據庫的規范,也就說關系型數據庫都應該支持這種寫法

總結

1、最后選擇了 行行比較 這種方式來實現了需求

別問我為什么,問就是逼格高!

2、某一個需求的實現往往有很多種方式,我們需要結合業務以及各種約束綜合考慮,選擇最合適的那個

3、行行比較是 SQL-92 中引入的,SQL-92 是 1992 年制定的規范

行行比較不是新特性,而是很早就存在的基礎功能!

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SQL
    SQL
    +關注

    關注

    1

    文章

    760

    瀏覽量

    44080
  • 數據庫
    +關注

    關注

    7

    文章

    3767

    瀏覽量

    64278

原文標題:高逼格的SQL寫法:行行比較

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    不高,數量不是唯一標準

    對于追求“”的人而言,氙氣大燈已經落伍,激光照明又買不到,LED剛剛好。衡量汽車LED大燈好壞,燈泡數量是重要標準,數量越多,照明效果越好,越顯檔次。但燈泡數量也不是唯一,還是有其他“高大上”的標準。
    發表于 02-22 14:04 ?792次閱讀

    關于labview中的SQL語句寫法

    我的問題是:比如說要查詢數據庫中的時間在20120806-20130105之間的數據 ,用vi程序查詢,那么SQL query語句該怎么寫? 求大神幫忙???謝謝
    發表于 01-05 22:09

    用混凝土做的吊燈,讓你的家變成藝術館

    經常會在一些復古的店里見到一些比較有格調的燈,也想在家裝一個。雖然某寶上什么都有,但自己做一個會更好吧。剛好看到有國外網友做了一個的混凝土燈,可以分享一下。步驟1:供給和工具-混
    發表于 11-24 16:37

    請教大神們,一個修手機的應該在論壇里看那類的帖子,或者哪方面的書籍來提升

    論一個苦+低文化的維修人員的和節操疑問和疑惑如題,現在修手機到一定瓶頸了,想提升自己只能再學習些對我來說特別專業的知識,想到手機主板的設計與研發少不了電路的設計,所以來壇里向大神們取取經,感激不盡
    發表于 06-08 23:27

    最簡單的設備,也能拍攝的照片

    ,根據自己的情況有個度就行了。今天就教大家如何用最簡單的、普通的設備,拍攝的照片。第一,沒有做不到,只有想不到第二、后期創意處理,效果驚人攝影是一門藝術,創意比器材重要,初學攝影者,不需要一門心思的升級設備,好的作品是需要
    發表于 08-25 16:15

    你絕沒用過的一款空間可視化工具

    ='geojson')數據導入進來后,作一些簡單的自定義設置,就可以生成滿滿的空間可視化圖:除了在 Jupyter Notebook 展示,還可以導出為可交互式
    發表于 07-30 04:00

    三星玩,雙曲面剛過去,折疊功能又來了?

    盡管還沒從三星的新產品Note7爆炸案件陰影中徹底走出,但是大眾對于三星在手機領域的研發能力還是頗為認可的,三星在手機專利領域確實也“玩”出了。這不,剛剛在雙曲面上突破了,又在折疊專利上有了“新招兒”。
    發表于 01-10 09:40 ?407次閱讀
    三星玩<b class='flag-5'>高</b><b class='flag-5'>逼</b><b class='flag-5'>格</b>,雙曲面剛過去,折疊功能又來了?

    小米5s,華為mate9這幾款手機的黑色版本真的

    黑色應該是流行了最久的一個顏色了,個人感覺黑色的東西非常,自帶一種高冷范。手機也是如此,黑色作為主配色之一,也深受用戶的喜愛。如果下面這些手機中有你喜歡的,不妨考慮考慮黑色版本。
    發表于 03-09 09:19 ?2086次閱讀

    iPhone 7 Plus等8款顏控手機,哪款把你給觸動了?

    無可否認,蘋果手機是國內街頭出現率最高的手機,價格昂貴、知名度使得蘋果手機似乎成為了衡量一個人是否富有是否有的標準,所以把IPhone7 Plus放進這個榜單中我想沒人會反對。
    發表于 04-05 09:35 ?1334次閱讀

    還記得那個曾經滿滿的VAIO筆記本嗎?重新殺回來了

    曾經何時,索尼旗下VAIO筆記本就是的代名詞,其在國內擁有眾多粉絲,愿意圍棋買單的用戶比比皆是,既然有這么大市場,為何不重新殺回來呢?
    發表于 07-11 14:42 ?806次閱讀

    雪佛蘭科邁羅,馬自達MX-5,標致RCZ便宜和的三款撩妹必備的神車,售價基本在四十萬左右

    又到了躁動的夏季,在這個炎熱的季節里,好像一切都顯得那么不安分。比如人的荷爾蒙,在這個季節總是會特別泛濫,男人們總是會想著到處去撩妹,可是在這個功利的時代,沒有一輛的好車,如何能撩得一手好妹呢
    發表于 07-17 11:27 ?1480次閱讀

    SQL告別count改用LIMIT 1

    的count 目前多數人的寫法 多次REVIEW代碼時,發現如現現象:業務代碼中,需要根據一個或多個條件,查詢是否存在記錄,不關心有多少條記錄。普遍的SQL及代碼寫法如下 ##### SQL
    的頭像 發表于 07-26 10:57 ?2032次閱讀

    JAVA8提供了Optional類來優化這種寫法

    這種寫法比較丑陋的,為了避免上述丑陋的寫法,讓丑陋的設計變得優雅。JAVA8提供了Optional類來優化這種寫法,接下來的正文部分進行詳細說明
    的頭像 發表于 04-24 15:18 ?1050次閱讀

    SQL MySQL編寫技巧:行與行比較的功能

    實現簡單,SQL 也能走索引,而且只查詢一次數據庫,感覺可行 只是:有點不好理解,因為我們平時這么用的少,所以這種寫法看起來很陌生 另外,行行比較
    發表于 07-17 09:51 ?478次閱讀
    <b class='flag-5'>SQL</b> MySQL編寫技巧:行與行<b class='flag-5'>比較</b>的功能

    insert into 語句的三種寫法

    INSERT INTO是MySQL中常用的一種SQL語句,用于將數據插入到表中。此文將詳細介紹INSERT INTO語句的三種不同寫法及其用途,并提供代碼示例和相關解釋。 正文: 一、基本插入
    的頭像 發表于 11-21 14:18 ?1.3w次閱讀