0

それらのいずれかが変数と一致するかGROUP BY item_idどうかを確認する必要があります。user_idもしそうなら、0でなければ= 1にしたい。

たとえば、次のようなテーブルを想像してください。

item_id, user_id
1         1
1         3
2         4
2         1
2         7
2         3
3         4
3         6
4         8
4         1
5         3


IF (user_id = 3,1,0) AS match,

私のクエリが次のように戻ってくるようにしたい

item_id, match
1        1 
2        1
3        0
4        0
5        1

「1」は、item_id グループ内の user_id 3 のすべてのオカレンスです。

4

3 に答える 3

5

適切な集計関数が必要です。

select item_id,
       max(case when user_id = 3 then 1 else 0 end) as hasmatch
from t
group by item_id
order by item_id
于 2012-09-27T17:46:07.470 に答える
1

MySQLでは、trueは 1 でfalseは 0 であるため、次のように実行できます。

SELECT item_id, MAX(user_id = 3) AS has_match
FROM table
GROUP BY 1

一致した数を数えることもできます:

SELECT item_id, SUM(user_id = 3) AS matches
FROM table
GROUP BY 1

GROUP BY 1最初の選択式GROUP BY item_idと同様に、の略です。item_id

于 2012-09-27T17:52:20.763 に答える
0

私は次のようにします:

SELECT
    A.item_id, ISNULL(B.count, 0)
FROM
    (SELECT DISTINCT item_id 'item_id' FROM myTable) AS A
    LEFT JOIN 
        (
            SELECT item_id, count(*) 'count' 
            FROM myTable WHERE user_id IN (3, 1, 0)
            GROUP BY item_id
        ) AS B
    ON A.item_id = B.item_id
于 2012-09-27T17:48:26.660 に答える