首頁  >  文章  >  資料庫  >  mysql中怎麼用一條sql將多條無法進行關聯的sql封裝到一個結果集中

mysql中怎麼用一條sql將多條無法進行關聯的sql封裝到一個結果集中

王林
王林轉載
2023-05-27 10:24:47695瀏覽

問題處理流程

簡單交代一下業務場景,為方便理解,對業務需求做了簡化處理。

現在有一個分銷活動,每個人都可以成為分銷人進行分享活動,一旦有人透過分享的活動連接購買之後分銷人會有收益信息,當然分銷活動商品也可以不通過分享鏈接而是直接購買,但是不會有分銷收益一說。表結構方面,所有的訂單都存入訂單表order中,對於存在分銷關係的會將分銷綁定資訊(分銷人與被分銷人)記錄到record表中,不透過分銷直接購買的不會在record表中新增記錄。現在要求統計當天的訂單總數與分銷記錄總數,假設當天為2022.11.08。

如果是單獨統計計算很簡單,直接統計總數就可以:

統計當天的總訂單數:

SELECT COUNT(1) total_couut FROM order WHERE DATE_FORMAT(order_create_time,'%Y-%m-%d') = '2022-11-08'

統計當天的分銷總的分銷記錄數:

SELECT COUNT(1) record _count FROM record WHEREDATE_FORMAT(create_time,'%Y-%m-%d') = '2022-11-08'

但是如何將兩個不同的統計資料封裝到一個結果集中,這裡提供一個處理方案,使用union all進行並列查詢,然後進行求和查詢。具體實現方式如下。

1.使用union all進行並列查詢

為保證查詢出來的參數資訊一致,查詢訂單總數時補充上分銷記錄總數,查詢分銷記錄總數補充上訂單總數,具體實現如下:

SELECT COUNT(1)  total_couut,0 record_count FROM order WHERE DATE_FORMAT(order_create_time,'%Y-%m-%d') = '2022-11-08'
union all 
SELECT 0 total_count,COUNT(1) record _count FROM record WHEREDATE_FORMAT(create_time,'%Y-%m-%d') = '2022-11-08'

查詢結果如下:

mysql中怎麼用一條sql將多條無法進行關聯的sql封裝到一個結果集中

#2.求和處理

現在已經查詢出總訂單數和總分銷記錄數,下面需要處理的是如何封裝到一個結果集中,處理的方式也很簡單,就是直接求和,因為對應的字段值都是0,。具體實作如下:

select sum(t.total_count) total_count, sum(t.record_count) record_count from
(SELECT COUNT(1)  total_couut,0 record_count FROM order WHERE DATE_FORMAT(order_create_time,'%Y-%m-%d') = '2022-11-08'
union all 
SELECT 0 total_count,COUNT(1) record _count FROM record WHEREDATE_FORMAT(create_time,'%Y-%m-%d') = '2022-11-08') t

查詢結果如下:

mysql中怎麼用一條sql將多條無法進行關聯的sql封裝到一個結果集中

#

以上是mysql中怎麼用一條sql將多條無法進行關聯的sql封裝到一個結果集中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除