![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 迷路 ![]()
![]() ![]() |
取得總數 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式合併,加快處理速度 |
1樓
最有價值解答
缺氧的羊:窒息 ![]() ![]() |
取得總數, 與取得總合, 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樓
作者回應
迷路 ![]() ![]() |
用CASE+SUM來代替COUNT!!
學到了,感謝大大 另外順便問一下,這種方式和分五次查訊相比,效率會比較高嗎?
本篇文章回覆於2020-04-10 16:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
原則上一定比較高(原則上, 原則上, 原則上....
這跟索引配置有關(整個負擔都在資料庫) 配置不當的話會遠比直接一次撈全部, 然後才在網站做統計還來得慢 =========================== 我遇到查詢條件不太一樣時, 通常是用group by先把可以重疊的挖出來, 然後把不同的部份 逐一去各自累計(資料庫一樣只查一次, 其他的負擔留在網站伺服器)
本篇文章回覆於2020-04-10 16:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |