【发布时间】:2018-03-16 03:28:34
【问题描述】:
我正在使用query 来生成计数。以下是我的查询
SELECT COUNT(DISTINCT sur.`customer_id`) AS 'Survey Done'
,COUNT(CASE WHEN sn.operator_name LIKE '%Zong%' AND sn.`signal_strength` = 'No Signal' THEN 1 ELSE NULL END) AS 'Zong No Signal'
,COUNT(CASE WHEN sn.operator_name LIKE '%Mobilink%' AND sn.`signal_strength` = 'No Signal' THEN 1 ELSE NULL END) AS 'Mobilink No Signal'
,COUNT(CASE WHEN sn.operator_name LIKE '%Ufone%' AND sn.`signal_strength` = 'No Signal' THEN 1 ELSE NULL END) AS 'Ufone No Signal'
,COUNT(CASE WHEN sn.operator_name LIKE '%Telenor%' AND sn.`signal_strength` = 'No Signal' THEN 1 ELSE NULL END) AS 'Telenor No Signal'
,COUNT(CASE WHEN sur.`pole_type` LIKE '%Wall%' THEN 1 ELSE NULL END) AS 'Wall'
,COUNT(CASE WHEN sur.`pole_type` LIKE '%PC Pole%' THEN 1 ELSE NULL END) AS 'PC Pole'
,COUNT(CASE WHEN sur.`pole_type` LIKE '%Structure Pole%' THEN 1 ELSE NULL END) AS 'Structure pole'
,COUNT(CASE WHEN sur.`pole_type` LIKE '%Spon pole%' THEN 1 ELSE NULL END) AS 'Spon pole'
,sd.`sub_div_code` AS 'SD Code',
sd.`name` AS 'SD Name',
sd.`circle_name` AS 'Circle Name',
sd.`division_name` AS 'Division Name'
FROM `survey` sur
INNER JOIN `survey_hesco_subdivision` sd ON sur.`sub_division` =
sd.`sub_div_code`
INNER JOIN `survey_networks` sn ON sur.`id` = sn.`survey_id`
WHERE sur.`customer_id` IN ('37010185878',
'37010718785',
'37010718759',
'37010357911',
'37010673539',
'37010673796',
'37010672166',
'37010672162')
GROUP BY sd.`name`
所有计数都正确,但以下部分的值不正确
,COUNT(CASE WHEN sur.`pole_type` LIKE '%Wall%' THEN 1 ELSE NULL END) AS 'Wall'
,COUNT(CASE WHEN sur.`pole_type` LIKE '%PC Pole%' THEN 1 ELSE NULL END) AS 'PC Pole'
,COUNT(CASE WHEN sur.`pole_type` LIKE '%Structure Pole%' THEN 1 ELSE NULL END) AS 'Structure pole'
,COUNT(CASE WHEN sur.`pole_type` LIKE '%Spon pole%' THEN 1 ELSE NULL END) AS 'Spon pole'
他们的输出是10,4,24 和0。但实际计数为4,1,7 和0
样本输出为
最后一个值spon pole 是0 对于某些记录但不是所有记录,因此它的计数也不正确。
如何获得这些值的正确计数?我也尝试过= 登录替换LIKE,但它仍然不会给我正确的结果。我也看过这个solution
任何帮助将不胜感激
【问题讨论】:
-
如果你把你的 SQL 放到 Sqlfiddle.com 中,你有更好的机会得到一个好的答案。结构和一些示例数据,以及预期的结果。
-
您能否提供一些真正有用的示例数据
-
@BrianHoover 你可以看一下here,但结果是正确的,因为我只添加了
pol_type部分。 Sqlfiddle 不允许我扩展架构,因为它给了我一个错误。 -
@D-Shih 我已经在问题中添加了输出
-
在没有看到所有数据的情况下,我的假设是您的表中的 INNER JOIN 为每个调查创建了多行,因此您计算pole_type 的次数比您预期的要多。您必须执行 COUNT DISTINCT 才能获得正确数量的调查,这一事实似乎表明情况确实如此。