如何使用FIND_IN_SET或LOCATE或必须得到一个计数
问题描述:
我有一个表中有一个id与多个数值。如表中id = 200的值是value_id =(337,22878,4,10,99),id = 201的值是value_id =(337,22878,99)。如何使用FIND_IN_SET或LOCATE或必须得到一个计数
我使用group_concat函数来获取所有值对一个id。
现在我想有ID的总数不包含价值为4
对于我试图像
- COUNT许多事情(如果(FIND_IN_SET(4,GROUP_CONCAT(value_id ))> 0,1,NULL))
- COUNT(如果(LOCATE(4,GROUP_CONCAT(value_id))> 0,0,1))
- GROUP_CONCAT(value_id)AS all_data,COUNT(如果(LOCATE( 4,all_data )> 0,0,1))
- COUNT(如果(GROUP_CONCAT(alloc.table_id)= 4,0,1))
- 我使用具有也(我不想使用它,因为在存储过程 性能问题)
结果试图:我总是得到错误代码:1111无效使用组功能的
select manager_profile_id,group_concat(value_id) as all_data
from managers
where manager_profile_id =487 and team_id=2
GROUP BY manager_profile_id HAVING all_data !=4 ;
答
你可以这样做:
select manager_profile_id, group_concat(value_id) as all_data
from managers
where manager_profile_id = 487 and team_id = 2
group by manager_profile_id
having sum(value_id = 4) = 0;
答
在你的问题是不明确的,如果你的ID(例如:2 00)是一个新的列或manager_profile_id(我的查询中我使用的ID此) 您可以排除使用到valud_id = 4相关的ID的不
select
manager_profile_id
,group_concat(value_id) as all_data
from managers
where manager_profile_id =487 and team_id=2
and where id not in ( select distinct id from managers where value_id = 4)
真的逗号分隔值?数据库不是为逗号分隔的值而设计的...我建议你将表格归一化,你可以指望很多eazier。 –
您需要计算ID的总数。哪个ID? manager_profile_id或team_id?我假设不包含的值在value_id中。 – Sal