如果使用4个表或Perl,则MySQL计数
嗨,我有一个相对复杂的查询,它依赖于4个不同的表,不幸的是我不能控制这个数据,但我必须查询它 我运行了这个更简单的查询,它只使用表1和表2如果使用4个表或Perl,则MySQL计数,mysql,sql,Mysql,Sql,嗨,我有一个相对复杂的查询,它依赖于4个不同的表,不幸的是我不能控制这个数据,但我必须查询它 我运行了这个更简单的查询,它只使用表1和表2 SELECT actor, receiver, count(IF(t2.group1 = "anxiety behavior", 1,0)) AS 'anxiety' FROM ethogram_edited_obs_behaviors t1 JOIN ethogram_behaviors t2 on t1.behavior = t2.
SELECT actor, receiver, count(IF(t2.group1 = "anxiety behavior", 1,0)) AS 'anxiety'
FROM ethogram_edited_obs_behaviors t1
JOIN ethogram_behaviors t2 on t1.behavior = t2.behavior_code
GROUP BY actor;
下面是我需要的4个表和我尝试过的不起作用的查询
Table 1 | Table 2 | Table 3 | Table 4
Actor | Behavior | Behavior | type of Behavior | subject | sex | subject |subject_code
er frown | frown anxiety behavior | Eric M | Eric | er
下面是失败的查询
SELECT actor, count(IF(t2.group1 = "anxiety behavior", 1,0) AND(t3.sex = "M", 1,0)) AS 'anxiety',
FROM ethogram_edited_obs_behaviors t1
JOIN ethogram_behaviors t2 on t1.behavior = t2.behavior_code
JOIN subject_code t3 on t1.actor = t3.behavior_code1
JOIN subjects t4 on t3.subject = t4.yerkes_code
GROUP BY actor;
任何帮助都将不胜感激!!谢谢:)
另外,如果在Perl中更容易做到这一点,那么也非常感谢COUNT(if(…)
没有意义,因为无论if返回什么,它都会对行进行计数。我想你可能想要SUM(IF(…))作为焦虑
此外,IF的语法是错误的。应该是:
SUM(IF(t2.group1 = "anxiety behavior" AND t3.sex = "M", 1, 0)) AS anxiety
或者简单地说:
SUM(t2.group1 = "anxiety behavior" AND t3.sex = "M") AS anxiety
由于条件表达式返回1表示true,0表示false。使用count(if(…)时),应该为false部分使用null。将0替换为null。我没有费心去寻找其他问题,但是前面有一个额外的逗号,它会打断语句。它怎么会失败?您是否有错误,如果有,是什么错误?或者你只是没有得到你想要的专栏?你问的目的是什么?此外,您似乎没有使用t4,但它已加入。您可能希望将作为焦虑
?大多数数据库都不喜欢在标识符应该位于的位置看到字符串文字,您不应该从MySQL的松散性中养成坏习惯。对字符串文字使用双引号而不是单引号也是如此。