[英]SELECT Statement should return 0 when condition is not met
如果不滿足條件,我如何使以下 MYSQL 語句返回 0。
(SELECT Sum(B.trblksize) AS RxData
FROM referencecoexistence_ber_lte B,
(SELECT C.*
FROM referencecoexistence C
WHERE `sw_ver` = '0.4'
AND `lte_n_frames` = '50'
AND `lte_rb` = '6'
AND `lte_mcs` = '11'
AND `lte_p_mw` = '6.000000e-03'
AND `lte_vmsf_type` = 'BS'
AND `lte_vmsf_subframes` = '8 9'
AND `wlan_mcs` = '5'
AND `wlan_p_mw` = '100'
AND `channel` = 'A330'
AND `lte_freq_hz` = '2403000000'
AND `wlan_freq_hz` = '2412000000'
AND `wlan_ieee` = '802.11n') AS TableX
WHERE TableX.id = B.id
AND B.ber = '0'
GROUP BY lte_dist_m)
結果是:空集(0.280 秒)如果條件包括 B.ber = '0',則預期的 output 是:b.ber = 0 的結果如下所示:
接收數據
416342016
433004544
...
在我的情況下,如果它只返回一個條目就足夠了:
接收數據
0
該語句嵌入在計算某些吞吐量的較大語句中。
是否可以不執行該語句兩次?
在這里,我們將其更改為 LEFT OUTER JOIN。 我們將 B.ber = '0' 條件移動到 FROM 子句中,因為使用外連接,這將給我們帶來與條件在 WHERE 子句中不同的結果。
SELECT Sum(B.trblksize) AS RxData
FROM (SELECT C.*
FROM referencecoexistence C
WHERE `sw_ver` = '0.4'
AND `lte_n_frames` = '50'
AND `lte_rb` = '6'
AND `lte_mcs` = '11'
AND `lte_p_mw` = '6.000000e-03'
AND `lte_vmsf_type` = 'BS'
AND `lte_vmsf_subframes` = '8 9'
AND `wlan_mcs` = '5'
AND `wlan_p_mw` = '100'
AND `channel` = 'A330'
AND `lte_freq_hz` = '2403000000'
AND `wlan_freq_hz` = '2412000000'
AND `wlan_ieee` = '802.11n') AS TableX
LEFT OUTER JOIN referencecoexistence_ber_lte B
ON TableX.id = B.id
AND B.ber = '0'
GROUP BY lte_dist_m
現在當 B.ber 為零時,它將像一個內部連接。 但是,當 B.ber 不為零時,則連接中將缺少內連接結果,但外連接將包含 B 表的所有列的結果,但 TableX 表的所有列的 NULL。 所以這些記錄的 B.trblksize 為 NULL,它們的總和為 NULL。
我通過簡單地使用以下方法解決了這個問題
(SELECT SUM(IF(T_.BER =0,T_.TrBlkSize,0)) as RxData, Lte_Dist_m FROM
(ReferenceCoexistence WHERE <CONDITION LIST>) as X,
ReferenceCoexistence_BER_Lte as T_
WHERE X.ID = T_.ID GROUP BY Lte_Dist_m)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.