-- 這個必使用外連接的方式,機器可不知道你要顯示條件中那三個數值。
with mt as (
select 1005001 c from dual
union all
select 1005002 from dual
union all
select 1005003 from dual
)
select mt.c , count(*)
from mt left join tb_smp_sms_history_201409 t on business_id = mt.c
where latn_id=919
group by mt.c
select a.business_id,nvl(b.b1,0) 合計
from 標碼表 a left join
(select count(*) b1,business_id from tb_smp_sms_history_201409 t where latn_id=919 and business_id in(1005001,1005002,1005003) group by business_id ) b
on a.business_id=b.business_id
group by a.business_id
;
你的(latn_id=919 and business_id=1005003)=false吧
非要顯示的話
select a.business_id, nvi(b.cnt,0) as cnt
from (select business_id
from tb_smp_sms_history_201409 t
where business_id in (1005001, 1005002, 1005003)) a,
(select count(*) as cnt, business_id
from tb_smp_sms_history_201409 t
where latn_id = 919
and business_id in (1005001, 1005002, 1005003)
group by business_id) b
where a.business_id = b.business_id
不過其實從統計角度看,這個不存在的值根本就沒意義
uj5u.com熱心網友回復:
select count(*),business_id from tb_smp_sms_history_201409 t where latn_id=919 and business_id in(1005001,1005002,1005003) group by business_id
上面說的 union all 的方法不錯。
下面這樣把 union all 放面,或者我們把默認的 0 與 count() /group 的結果 union all一起再 sum 一次。
select sum(cnt) as cnt, business_id
from (
select 0 as cnt, 1005001 as business_id from dual
union all
select 0 as cnt, 1005002 as business_id from dual
union all
select 0 as cnt, 1005003 as business_id from dual
union all
select 1 as cnt,business_id
from tb_smp_sms_history_201409 t
where latn_id=919 and business_id in(1005001,1005002,1005003)
) a
group by business_id
uj5u.com熱心網友回復:
其實這個問題后面是對 SQL 陳述句的執行次序的理解:
一條普通的 select 陳述句,
首先是從 from 部分開始執行的,
然后是可選的 join 部分
然后是 where 部分
最早執行的肯定是 SQL 中的 "選擇運算”,
select 后面的是最后執行,它是投影運算。
選擇運算沒有命中的記錄,不會被投影運算處理的。
因此在 where 條件沒有命中的記錄,不會被 group by 處理,自然也就沒有 0 這個占位子家伙了。
select count(*),business_id from tb_smp_sms_history_201409 t where latn_id=919 and business_id in(1005001,1005002,1005003) group by business_id
SELECT
t.business_id,
IFNULL(t.num, 0)
FROM
(
(SELECT DISTINCT
business_id
FROM
tb_smp_sms_history_201409
WHERE business_id IN (1005001, 1005002, 1005003)) a
LEFT JOIN
(SELECT
COUNT(*) AS num,
business_id
FROM
tb_smp_sms_history_201409 t
WHERE latn_id = 919
AND business_id IN (1005001, 1005002, 1005003)
GROUP BY business_id) b
ON a.business_id = b.business_id
) t
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......