Mysql 具有带条件计数的SQL查询

Mysql 具有带条件计数的SQL查询,mysql,sql,Mysql,Sql,我想根据联接表与条件的关联数检索记录。用通俗易懂的英语,查询将是: 获取关联的日志数具有操作的('foo'、'bar'、'moo')之一小于5(也可以为空)的所有属性。所以更准确地说,它可以有10个日志,但是如果其中4个或更多的日志有('foo'、'bar'、'moo')中的一个动作,那么就不应该包括它 没有计数的情况下,条件正在工作,尽管我不确定它是否包括没有日志的情况: SELECT p.id , count(l.object_id) FROM properties p

我想根据联接表与条件的关联数检索记录。用通俗易懂的英语,查询将是:

获取关联的
日志数
具有
操作
的('foo'、'bar'、'moo')之一小于5(也可以为空)的所有属性。所以更准确地说,它可以有10个日志,但是如果其中4个或更多的日志有('foo'、'bar'、'moo')中的一个动作,那么就不应该包括它

没有计数的情况下,条件正在工作,尽管我不确定它是否包括没有日志的情况:

SELECT p.id
     , count(l.object_id) 
  FROM properties p
  LEFT 
  JOIN logs l
    ON l.object_id = p.id
   AND l.object_type = 'Property'
 GROUP 
    BY p.id 
 HAVING (count(l.object_id) < 5);
选择p.id
,计数(l.object\u id)
从属性p
左边
连接日志
在l.object_id=p.id上
l.object_type='Property'
团体
按p.id
具有(计数(l.object_id)<5);
问题是如果我想要上面指定的条件,它就不起作用(语法显然是错误的)

选择properties.id,从上的'properties'左侧外部连接'logs'
->'logs`.'object\u id`='properties`.'id`和'logs`.'object\u type`='Property'
->GROUP BY properties.id具有(count)(logs.object_id,其中logs.action在
->(‘foo’、‘bar’、‘moo’)<5);

注意:日志表有超过1000万条记录。。。我尝试过使用嵌套的
选择where
,但这不是一个选项,因为查询超时。

在MySql中,条件可以写成:

HAVING SUM(logs.action in ('foo', 'bar', 'moo')) < 5

类似于
拥有count(当logs.action在('foo','bar','moo')中时为1 end)<5
?谢谢,它可以工作,但是我认为它不包括没有日志的属性,知道如何包括它们吗?是的,完全正确。他们应该被退回的,糟糕的是我没看到
HAVING COALESCE(SUM(logs.action in ('foo', 'bar', 'moo')), 0) < 5