台灣最大程式設計社群網站
線上人數
500
 
會員總數:245815
討論主題:189440
歡迎您免費加入會員
討論區列表 >> MySQL >> 有共通條件的SQL式合併問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
有共通條件的SQL式合併問題
價值 : 100 QP  點閱數:356 回應數:3
樓主

迷路
高級專家
11021 137
7409 1740
發送站內信

捐贈 VP 給 迷路
SELECT COUNT(*) FROM `tableA` WHERE `ID`=xxx AND `DT`>='2020-02-01' AND `DT`<='2020-02-29';
取得總數
SELECT COUNT(*) FROM `tableA` WHERE `ID`=xxx AND `DT`>='2020-02-01' AND `DT`<='2020-02-29' AND `TypeA`=1;
取得條件一的總數
SELECT COUNT(*) FROM `tableA` WHERE `ID`=xxx AND `DT`>='2020-02-01' AND `DT`<='2020-02-29' AND `TypeB`=1;
取得條件二的總數
SELECT COUNT(*) FROM `tableA` WHERE `ID`=xxx AND `DT`>='2020-02-01' AND `DT`<='2020-02-29' AND `TypeA`=0 AND `TypeB`=0 AND `Kind`='abc' AND `Class`='def';
取得條件三的總數
SELECT SUM(`Number`) FROM `tableA` WHERE `ID`=xxx AND `DT`>='2020-02-01' AND `DT`<='2020-02-29';
取得欄位的總和
同一張表,並且都有共通條件限制,是否能將這些SQL式合併,加快處理速度

搜尋相關Tags的文章: [ mysql ] , [ 合併查詢 ] ,
本篇文章發表於2020-03-26 15:33
1樓
最有價值解答

缺氧的羊:窒息
捐贈 VP 給 缺氧的羊:窒息 檢舉此回應
取得總數, 與取得總合, count 跟 sum是可以同時使用的

SELECT count(*) as myCount, sum(price) as mySum FROM `tableA`


要再加上條件1,2的話...,
我知道的方式如下...

SELECT
sum(case when TypeA='1' then 1 else 0 end ) as 'TA_is_1',
sum(case when TypeB='1' then 1 else 0 end ) as 'TB_is_1',
sum(case when `TypeA`=0 AND `TypeB`=0 AND `Kind`='abc' AND `Class`='def' then 1 else 0 end ) as 'TC_is_1',

count(*) as myCount,
sum(price) as mySum FROM `tableA`

這樣子一筆資料有5個欄位, 分別是
A.TypeA為1的個數(要用sum來統計哦, 不然0也會被算進去)
B.TypeB為1的個數
C.條件三
D.總數
E.總和

至於全部共用的日期, 就是`tableA` 之後的 where條件
本篇文章回覆於2020-04-09 16:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

迷路
捐贈 VP 給 迷路 檢舉此回應
用CASE+SUM來代替COUNT!!
學到了,感謝大大
另外順便問一下,這種方式和分五次查訊相比,效率會比較高嗎?
本篇文章回覆於2020-04-10 16:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
原則上一定比較高(原則上, 原則上, 原則上....

這跟索引配置有關(整個負擔都在資料庫)

配置不當的話會遠比直接一次撈全部, 然後才在網站做統計還來得慢

===========================
我遇到查詢條件不太一樣時, 通常是用group by先把可以重疊的挖出來,
然後把不同的部份 逐一去各自累計(資料庫一樣只查一次, 其他的負擔留在網站伺服器)
本篇文章回覆於2020-04-10 16:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.