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

關于Mysql子查詢的三個應用場景

 更新時間:2023年07月03日 11:32:24   作者:榴蓮小冰棍  
這篇文章主要介紹了關于Mysql子查詢的三個應用場景,子查詢是在一個完整的查詢語句中,嵌套不同功能的小查詢,從而完成復雜查詢的一種編寫形式,需要的朋友可以參考下

應用場景

一個select語句的查詢結果能夠作為另一個語句的輸入值,主要有三種情況,分別為:

1.子查詢可以出現(xiàn)在Where子句中,作為過濾條件

select 列名
from 表名
where 列 操作符 (select 列名 from 表名)

2.也可以出現(xiàn)在from子句中,作為一個臨時表使用

select 列名
from (select 列名 from 表名)

3.能夠出現(xiàn)在select list中,作為一個字段值來返回

select 列名,(select 列名 from 表名)
from 表名
where 列 操作符?????

注意事項:

  • 子查詢只能有一個字段的情況
    1. 子查詢在select上面,一定是只能一個字段;如果超過一個字段,代碼會報錯
    2. 子查詢在where后面,當做一個過濾條件,這個字段也必須有且只有一個
  • 可以有多個字段的情況
    1. 當子查詢在from后面,是可以有多個字段的,因為他就是一張表;
    2. 注意:子查詢在from后面做臨時表來用,必須給子查詢生成的臨時表取別名,否則會報錯
  • 時間型字符,在 where 過濾如果是常量,需要用''; 數(shù)字則不需要
  • 子查詢中,表是可以不一樣的

???????子查詢在Where中作過濾條件

2017年7月2號統(tǒng)計累計購買金額在100到200的會員,尋找這批會員的消費記錄

  1. 先找出當日累計購買金額在100-200之間的會員 用having來篩選
  2. 用查找出來的會員做過濾條件,查找消費記錄
-- 先找出當日累計購買金額在100-200之間的會員
SELECT dimMemberID 
      ,SUM(AMT) as money
FROM dw.fct_sales
where dimDateID ='20170702'
and dimMemberID <> 0
group by dimMemberID
-- having sum(AMT)>100 and sum(AMT)<200;
having money BETWEEN 100 and 200;
-- 用查找出來的會員做過濾條件,查找消費記錄
SELECT *
FROM dw.fct_sales
where dimDateID = '20170702'
and dimMemberID <>0
and dimMemberID in (
                    SELECT dimMemberID 
                       -- ,SUM(AMT) as money    子查詢在where后面,當做一個過濾條件,這個字段也必須有且只有一個,所以最后結果要返回過濾條件
                    FROM dw.fct_sales
                    where dimDateID ='20170702'
                    and dimMemberID <> 0
                    group by dimMemberID
                    having sum(AMT)>100 and sum(AMT)<200);
                    -- having money BETWEEN 100 and 200 );  不能直接用命名的列名money,要寫全函數(shù),因為前面語句沒有出現(xiàn)money,所以為了避免報錯,之后盡量寫全函數(shù)

子查詢在from中做臨時表

2017年7月2日對每位會員累計購買金額進行分段

  1. 統(tǒng)計2017年7月2日每位會員的累計購買金額
  2. 把第一步統(tǒng)計出來的數(shù)據(jù)作為臨時表,對統(tǒng)計出來的數(shù)據(jù)進行分組
-- 1、統(tǒng)計2017年7月2日每位會員的累計購買金額
SELECT dimMemberID 
      ,SUM(AMT) as money 
FROM dw.fct_sales
where dimDateID = '20170702'
and dimMemberID <> 0
group by dimMemberID ;
-- 2、把第一步統(tǒng)計出來的數(shù)據(jù)作為臨時表,對統(tǒng)計出來的數(shù)據(jù)進行分段
SELECT dimMemberID 
      ,money 
      ,case when money <100 then 'D'
            when money >=100 and money <500 then 'C'
            when money >=500 and money <1000 then 'B'
            when money >=1000 then 'A'
            else '其它'
       end as type1
FROM (SELECT dimMemberID                      /*臨時表可以生成多個字段,并不是每個字段都需要用也行*/
            ,SUM(AMT) as money 
      FROM dw.fct_sales
      where dimDateID = '20170702'
      and dimMemberID <> 0
      group by dimMemberID) as sn;            /*子查詢在from后面做臨時表來用,必須給這個子查詢生成的臨時表取一個表的別名,否則會報錯*/

子查詢在select作為一個字段來返回

2017年7月2日計算每個會員購買金額,以及每個會員購買金額占總體金額的比

  • 2017年7月2日每個會員購買金額
  • 總體金額
  • 合并兩個表  

注意:在合并時where的條件要寫全,不要遺漏,不然容易出現(xiàn)邏輯錯誤

-- 1、2017年7月2日每個會員購買金額
SELECT dimMemberID 
      ,SUM(AMT) as money
FROM dw.fct_sales
where dimDateID = '20170702'
and dimMemberID <>0                   /*去除非會員,即 dimMemberID 為 0 的數(shù)據(jù)*/
group by dimMemberID ;
-- 2、總體金額
SELECT SUM(AMT) 
FROM dw.fct_sales
where dimDateID = '20170702';
-- 3、合并兩個表   注意在合并時where的條件要寫全,不要遺漏,不然容易出現(xiàn)邏輯錯誤
SELECT dimMemberID 
      ,SUM(AMT) as money
      ,(SELECT SUM(AMT)                                /*統(tǒng)計總金額*/
        FROM dw.fct_sales
        where dimDateID = '20170702'
        and dimMemberID<>0) as total_money
      ,CONCAT(                                         /*加上%號*/
       ROUND(                                          /*四舍五入保留4位小數(shù),帶%一定要思考保留小數(shù)位數(shù)*/
       SUM(AMT)/(SELECT SUM(AMT) 
                 FROM dw.fct_sales
                 where dimDateID = '20170702'
                 and dimMemberID<>0),4)*100,'%') 
       as member_rate                                  /*合并表,統(tǒng)計占比*/
FROM dw.fct_sales
where dimDateID = '20170702'
and dimMemberID <>0                                    /*去除非會員,即 dimMemberID 為 0 的數(shù)據(jù)*/
group by dimMemberID ;

到此這篇關于關于Mysql子查詢的三個應用場景的文章就介紹到這了,更多相關Mysql子查詢應用場景內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL中的當前讀和快照讀的區(qū)別

    MySQL中的當前讀和快照讀的區(qū)別

    在MySQL中,當前讀和快照讀是事務中的兩種重要的讀取方式,當前讀,即鎖定讀,會對讀取的行記錄加鎖,確保數(shù)據(jù)一致性,兩者的主要區(qū)別在于鎖定機制、數(shù)據(jù)一致性、并發(fā)性能和幻讀問題,理解這些差異有助于根據(jù)業(yè)務需求選擇合適的讀取方式,保證數(shù)據(jù)庫的事務隔離性和一致性
    2024-09-09
  • MySQL深分頁問題解決思路

    MySQL深分頁問題解決思路

    這篇文章主要介紹了優(yōu)雅地解決mysql深分頁問題,本文將會討論當mysql表大數(shù)據(jù)量的情況,如何優(yōu)化深分頁問題,并附上最近的優(yōu)化慢sql問題的案例偽代碼,需要的朋友可以參考下
    2022-12-12
  • 簡單了解mysql mycat 中間件

    簡單了解mysql mycat 中間件

    這篇文章主要介紹了簡單了解mysql mycat 中間件,一個徹底開源的,面向企業(yè)應用開發(fā)的大數(shù)據(jù)庫集群支持事務、ACID、可以替代MySQL的加強版數(shù)據(jù)庫,需要的朋友可以參考下
    2019-06-06
  • mySQL之關鍵字的執(zhí)行優(yōu)先級講解

    mySQL之關鍵字的執(zhí)行優(yōu)先級講解

    這篇文章主要介紹了mySQL之關鍵字的執(zhí)行優(yōu)先級講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • mysql格式化字符串長度不夠補0問題

    mysql格式化字符串長度不夠補0問題

    這篇文章主要介紹了mysql格式化字符串長度不夠補0問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 加了?limit?1?查詢竟然變慢了的原因分析及解決辦法

    加了?limit?1?查詢竟然變慢了的原因分析及解決辦法

    在使用MySQL進行查詢優(yōu)化時,LIMIT語句雖然看似簡單,但如果不注意使用場景,可能會對性能造成顯著影響,這篇文章主要介紹了加了limit?1查詢竟然變慢了的原因分析及解決辦法的相關資料,需要的朋友可以參考下
    2026-04-04
  • mysql的約束及實例分析

    mysql的約束及實例分析

    這篇文章主要介紹了mysql的約束及實例分析,真正約束字段的是數(shù)據(jù)類型,但是數(shù)據(jù)類型約束很單一,需要有一些額外的約束,更好的保證數(shù)據(jù)的合法性,從業(yè)務邏輯角度保證數(shù)據(jù)的正確性,需要的朋友可以參考下
    2023-07-07
  • Mysql主鍵相關的sql語句集錦

    Mysql主鍵相關的sql語句集錦

    本文主要搜集總結了一些和mysql主鍵相關的sql語句,包括增加主鍵或者更改表的列為主鍵之類的sql語句,希望對大家能有所幫助
    2014-08-08
  • MySql command line client命令操作大全

    MySql command line client命令操作大全

    這篇文章主要介紹了MySql command line client命令操作大全,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 深入SQL Server中char、varchar、text和nchar、nvarchar、ntext的區(qū)別詳解

    深入SQL Server中char、varchar、text和nchar、nvarchar、ntext的區(qū)別詳

    本篇文章是對char、varchar、text和nchar、nvarchar、ntext的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論

东安县| 潍坊市| 仲巴县| 徐闻县| 泸定县| 峨眉山市| 墨竹工卡县| 上栗县| 如皋市| 上林县| 甘德县| 洱源县| 米易县| 陇川县| 抚远县| 五大连池市| 东光县| 方城县| 白玉县| 巫溪县| 宿州市| 蛟河市| 琼中| 博乐市| 两当县| 元谋县| 花莲市| 长寿区| 会昌县| 平定县| 宁强县| 都江堰市| 望江县| 秦皇岛市| 宾川县| 阿拉善右旗| 阳泉市| 西华县| 灵武市| 天津市| 锡林浩特市|