MySQL选择具有特定属性

时间:2016-01-28 16:59:45

标签: mysql sql database

对不起标题,但我的问题很难解释。

我有一张名为" TEL_LIST"用这个字段:

  • ID
  • TELEPHONE
  • STATUS

我有一行电话号码。状态可以是YES或NO。

我想计算状态为" NO"的总行数。 (不计算" YES"行)仅适用于至少有一个" YES"状态。

为了让你更好地理解,我想要这个:

修改

TEL:011, STATUS:YES
TEL:011, STATUS:NO
TEL:011, STATUS:NO
TEL:012, STATUS:NO
TEL:012, STATUS:NO
TEL:012, STATUS:NO
RESULT: 2.

TEL:011, STATUS:YES
TEL:011, STATUS:NO
TEL:011, STATUS:NO
TEL:012, STATUS:YES
TEL:012, STATUS:NO
TEL:012, STATUS:NO
RESULT: 4.

也许我没有解释清楚: 我想要所有" No"的总数(总和)。记录至少有一个"是"记录。

为了让您理解,我在联络中心工作。我希望所有负面呼叫(状态:否)的总数变为正数(状态:是)。

再次感谢你!

5 个答案:

答案 0 :(得分:0)

使用Conditional Aggregate计算值

select TEL,
       count(case when STATUS = 'Yes' Then 1 end) AS Conditional_Count
from yourtable
Group by TEL

另一种方式是

SUM(case when STATUS = 'Yes' Then 1 ELSE 0 end) 

更新:根据有问题的澄清

select count(case when STATUS = 'NO' Then 1 end) AS Conditional_Count
from yourtable
Having count(case when STATUS = 'YES' Then 1 end) > 0

答案 1 :(得分:0)

我认为这符合你的逻辑:

select tel,
       (case when sum(status = 'Yes') = 0 then 0
             else sum(status = 'No')
        end)
from t
group by tel;

答案 2 :(得分:0)

我想也许这可以帮助我:

{{1}}

我试过这个解决方案,但我不确定结果是否正确......

答案 3 :(得分:0)

我会使用左连接和按查询分组:

select t1.tel, count(t2.tel) AS total_no
from
  TEL t1 left join TEL t2
  on t1.tel=t2.tel AND t1.status='Yes' AND t2.status='No'
group by
  t1.tel

有关电话和状态的索引,表现应该是最佳的。 <= p>,不会返回任何状态=“是”的数字。

答案 4 :(得分:0)

试试这个:

选择x.Tel,count(distinct x.Number) 来自(        select t.Tel,tmp.tel不为null的情况,然后Id else null以Number结尾         从yourtable t          左外连接(                             选择电话                             来自你的                             where status ='是'                          )tmp on tmp.Tel = t.Tel             其中t.status ='不'         ) X x.tel分组