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