簡體   English   中英

SELECT 語句在不滿足條件時應返回 0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM