我有这样的桌子

user  |  app
name1   app1
name1   not an app
name1   app1
name1   app2
name2   not an app
name3   app1
name3   app3
name4   app1
name4   not an app2
name5   app1
name5   not an app
name5   not an app2


我需要弄清楚用户拥有一个app1和至少一种类型的应用程序“ not a app”的情况,在本示例中,我将其称为不是app而不是app2。

我需要找回这样的东西:

user
name1
name4
name5


我试图用WHERE AND NOT LIKE(s)进行过滤,然后按ORDER BY,我认为下一步将是类似于HAVING COUNT DISTINCT app = app1> 2但我在这里迷路了,只有在有app1的情况下我才必须开始计数。 。

理想情况下,id也想知道

user name: list of apps
user name1:  not an app, ...
user name4:  not an app2, ...
user name5:  not an app1, not an app2, ...

最佳答案

我不确定您的真正目标是什么,因为如果您需要了解某个用户拥有一个app1和至少一个“ not a app”的情况

您的预期结果

user
name1
name4
name5


是错的。

检查我的小提琴:http://sqlfiddle.com/#!9/cbb566/7

SELECT `user`
FROM table1 t1
GROUP BY `user`
HAVING SUM(IF(`app`='app1',1,0))>0
 AND SUM(IF(`app`='not an app',1,0))>0


更新如果您需要任何以“非应用程序”开头的内容

您可以http://sqlfiddle.com/#!9/cbb566/11

SELECT `user`
FROM table1 t1
GROUP BY `user`
HAVING SUM(IF(`app`='app1',1,0))>0
 AND SUM(IF(`app` LIKE 'not an app%',1,0))>0

关于mysql - SQL查询过滤器,计数是否,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32095863/

10-10 01:46