有共通條件的SQL式合併問題

迷路
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式合併,加快處理速度

最有價值解答

缺氧的羊:窒息
取得總數, 與取得總合, 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條件
迷路
用CASE+SUM來代替COUNT!!
學到了,感謝大大
另外順便問一下,這種方式和分五次查訊相比,效率會比較高嗎?
缺氧的羊:窒息
原則上一定比較高(原則上, 原則上, 原則上....

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

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

===========================
我遇到查詢條件不太一樣時, 通常是用group by先把可以重疊的挖出來,
然後把不同的部份 逐一去各自累計(資料庫一樣只查一次, 其他的負擔留在網站伺服器)
回到頂部