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