统计有多少客户拥有1项服务,有多少客户拥有2项服务

时间:2014-05-13 08:34:17

标签: php mysql select count

我有这张桌子

id_cliente | serv_cuidpess | serv_ali | serv_hab | serv_roupa

125       | 1              | 2        | 1        | 1  
126       | 2              | 1        | 2        | 1

表示id_cliente = customerID,其他serv_ =服务,其中1 =客户拥有该服务,2 =他没有。

我想要实现的是计算有多少客户拥有1项服务,有多少客户拥有2项服务,有多少客户拥有3项服务等等......我正在使用PHP / MySQL

2 个答案:

答案 0 :(得分:0)

由于您已将serv_提及为进程,因此我假设所有这些(serv_cuidpess + serv_ali + serv_hab + serv_roupa )都形成为进程。

要使用+运算符HAVING子句直接添加列的总和是用于过滤虚拟列,即TotalProcess

尝试以下查询

 select COUNT(id_cliente) AS NoOfUsers,(serv_cuidpess + serv_ali + serv_hab + serv_roupa ) as TotalProcess from PROCESSTABLE GROUP BY TotalProcess HAVING TotalProcess > 0;

答案 1 :(得分:0)

不知道到底在找什么,有2例

获取每位客户= 1时所需的全部服务。

获取每个服务的客户数= 1

通过上述内容,您可以尝试以下查询,但最好提供有关问题中预期输出的更多信息。

对于第一种情况,您可以执行

select
s.id_cliente,
sum(s1.ser1+s1.ser2+s1.ser3+s1.ser4) as tot_services
from services s
inner join
(
  select
  id_cliente,
  case  when serv_cuidpess = 1 then 1 else 0 end as ser1,
  case  when serv_ali = 1 then 1 else 0 end as ser2,
  case  when serv_hab = 1 then 1 else 0 end as ser3,
  case  when serv_roupa = 1 then 1 else 0 end  as ser4
  from services 


)s1 on s1.id_cliente = s.id_cliente
group by s.id_cliente;

对于第二种情况,您可以执行某些操作

select
serv1_client_count,
serv2_client_count,
serv3_client_count,
serv4_client_count
from services s
inner join
(
  select 
  s1.id_cliente,
  sum(s2.ser1) as serv1_client_count,
  sum(s2.ser2) as serv2_client_count,
  sum(s2.ser3) as serv3_client_count,
  sum(s2.ser4) as serv4_client_count
  from services s1
  inner join
  (
    select
    id_cliente,
    case  when serv_cuidpess = 1 then 1 else 0 end as ser1,
    case  when serv_ali = 1 then 1 else 0 end as ser2,
    case  when serv_hab = 1 then 1 else 0 end as ser3,
    case  when serv_roupa = 1 then 1 else 0 end  as ser4
    from services 
  )s2 on  s2.id_cliente = s1.id_cliente
)t on t.id_cliente = s.id_cliente

<强> DEMO

<强>更新

来自评论

  

输出应该显示有多少服务有1个服务1 ..如何   许多人有2项服务而非服务2

这是你可以做的事情

select
sum(client_count) as client_count,
serv_count
from services s
inner join
(
  select 
  s1.id_cliente,
  1 as client_count,
  sum(s2.ser1+s2.ser2+s2.ser3+s2.ser4) as serv_count
  from services s1
  inner join
  (
    select
    id_cliente,
    case  when serv_cuidpess = 1 then 1 else 0 end as ser1,
    case  when serv_ali = 1 then 1 else 0 end as ser2,
    case  when serv_hab = 1 then 1 else 0 end as ser3,
    case  when serv_roupa = 1 then 1 else 0 end  as ser4
    from services 
  )s2 on  s2.id_cliente = s1.id_cliente
  group by s1.id_cliente
)t on t.id_cliente = s.id_cliente
group by serv_count

<强> DEMO

相关问题