如何使用FIND_IN_SET或LOCATE或必须得到计数

时间:2017-09-02 08:35:21

标签: mysql sql

我有一个对id有多个数值的表。比如表中id = 200的值是value_id =(337,22,878,4,10,99),id = 201的值是value_id =(337,22,878,99)。

我使用group_concat函数来获取id的所有值。

现在我希望将不包含值的ID总数计为4。

为此,我尝试了许多像

的东西
  1. COUNT(if(FIND_IN_SET(4,GROUP_CONCAT(value_id))> 0,1,NULL))
  2. COUNT(if(LOCATE(4,GROUP_CONCAT(value_id))> 0,0,1))
  3. GROUP_CONCAT(value_id)AS all_data,COUNT(if(LOCATE(4,all_data) )> 0,0,1))
  4. COUNT(if(GROUP_CONCAT(alloc.table_id)= 4,0,1))
  5. 我尝试使用也(我不想使用它因为 存储过程中的性能问题)
  6. 结果:我总是收到错误代码: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 ;
    

2 个答案:

答案 0 :(得分:0)

你可以这样做:

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;

答案 1 :(得分:0)

在你的问题中不清楚你的id(例如:200)是一个新列还是manager_profile_id(在我的查询中我使用id为此) 您可以使用非IN

排除与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 )