我有这张桌子
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
答案 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 强>