0

こんにちは、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;

どんな助けでも大歓迎です!! ありがとう :)

PSこれがPerlのヒントで行う方が簡単であれば、それも大歓迎です

4

2 に答える 2

1

COUNT(IF(...))IF が返すものに関係なく行をカウントするため、意味がありません。おそらく欲しいと思いますSUM(IF(...)) as anxiety

また、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、偽の場合は 0 を返すためです。

于 2012-10-07T05:31:53.967 に答える
1

count(if(...)) を使用すると、false 部分に null を使用する必要があります。0 を null に置き換えます。

于 2012-10-16T13:20:56.503 に答える