0

我需要GROUP BY item_id检查user_id其中任何一个是否与变量匹配。如果是这样,我希望它 = 1,如果不是 0。

例如,想象这样的表:

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 回答