一张表:
table
内有字段
id,name,address,status 分别为表ID,用户名,用户所在地区,状态,yes|no
说明:
状态一列,当为yes时,表示开通了,当为no时表示没有开通现在想要达到的效果
计算出一个地区的总的记录数,并计算出这个地区的开通数。我使用语句:
select count(address) from table group by address 这句查出一个地区所有注册数select count(address) from table where status='yes' group by address 这句查出一个地区所有开通数后来我用UNION联合来做
写成这样:select count(address) from table group by address union all select count(address) from table where status='yes' group by address
这样是可以一次性得出来的。但问题也就出来了,比如说,北京,北京有两个注册的,但没有一个开通服务的,第一条语句有结果。联合时,union后边的得不到这个值。这样就没法配对了。哪位高手帮忙一下。
我要达到的效果就是,我执行完一条语句后,可以同时得到一个地区的总数和开通数,并配对出现。这样我可以计算成功率的。

解决方案 »

  1.   

    加个distinct
    select count(address) from table group by address union all select count(distinct address) from 
    table where status='yes' group by address
      

  2.   

    不行。
    会有重复的出现我在想用其它的方法解决
    如:
    select t1.num1,t2.num2 from (select count(address) as num1 from table group by address) as t1,(select count(address) as num2 from table where status='yes' group by address ) as t2但这样做还是有问题。还是配不上对。
      

  3.   

    已经搞定了,做法如下:select t1.num1,t2.num2 from (select count(address) as num1 from table group by address) as t1 left join (select count(address) as num2 from table where status='yes' group by address ) as t2 on (t1.address=t2.address)这样运行后,可以完全配对了。如果为空的话,会显示NULL的。
    呵呵