1

已编辑

我需要执行一个查询,该查询只为我提供所有手机都已确认的user_id = 2,而不仅仅是一两个,必须是所有手机。

我的表如下所示:

 id      user_id    phone        confirmed
 ------- --------   -----------  ---
 1       1          3051234561   1
 1       1          3051234562   0
 1       1          3051234563   2
 1       2          3051234564   2
 1       2          3051234565   2
 1       2          3051234566   2
 1       3          3051234567   0
 1       3          3051234568   1
 1       4          3051234569   1

在这种情况下必须返回 user_id 2

我试图用 GROUP HAVING 来做,但我没有得到我需要的结果。例子:

SELECT
*
FROM
    phones
GROUP BY 
    user_id
HAVING 
    MAX(confirmed) = 2
4

7 回答 7

2

尝试这个

SELECT distinct user_id FROM phones GROUP BY user_id HAVING sum(confirmed) = 2 * count(confirmed)

这将给所有没有任何确认电话的 user_id

于 2013-05-23T06:23:35.167 回答
1

Try this query -

SELECT
 user_id
FROM
  phones
GROUP BY 
  user_id
HAVING 
  COUNT(IF(confirmed = 2, 1, NULL)) = COUNT(*)

Output:

+---------+
| user_id |
+---------+
|       2 |
+---------+
于 2013-05-23T06:26:39.913 回答
0

试试下面的....

   "SELECT * FROM phones WHERE confirmed='0' GROUP BY user_id"
于 2013-05-23T06:22:12.270 回答
0

试试这个

SELECT *
FROM phones
Where confirmed= 0
GROUP BY user_id
于 2013-05-23T06:22:21.570 回答
0

你可以试试这样

SELECT user_id FROM phones WHERE confirmed=0 GROUP BY user_id;
于 2013-05-23T06:22:39.367 回答
0

从手机中选择不同的 user_id GROUP BY user_id HAVING sum(confirmed) = 0

你写了:

SELECT
*
FROM
    phones
GROUP BY 
    user_id
HAVING 
    MAX(confirmed) = 2

现在您需要所有确认为 0,得到它们的总和必须为零,并且您不需要所有属性,而是 user_id:

SELECT
    distinct(user_id)
FROM
    phones
GROUP BY 
    user_id
HAVING 
    SUM(confirmed) = 0
于 2013-05-23T06:26:16.770 回答
0

你需要一个WHERE条件GROUP BY

于 2013-05-23T06:18:55.893 回答