Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果使用4个表或Perl,则MySQL计数_Mysql_Sql - Fatal编程技术网

如果使用4个表或Perl,则MySQL计数

如果使用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.

嗨,我有一个相对复杂的查询,它依赖于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.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的松散性中养成坏习惯。对字符串文字使用双引号而不是单引号也是如此。