首页 新闻 搜索 专区 学院

mysql语句

0
[已解决问题] 解决于 2020-11-19 15:59

test表结构如图

需求是按照name分组,且过滤出status必须包含1,2的数据

得到的结果如图,flag只是个标记位,只要能通过此字段知道此用户是包含1,2的就行了

大佬们有没有好的思路

问题补充:

目前我这样也能解决,但是要用test表在关联一次,感觉代价太大了,实际上业务中这个test表也是一个查询出来的结果集,就想看看大佬们能不能单个查询解决

我恰芙蓉王的主页 我恰芙蓉王 | 菜鸟二级 | 园豆:296
提问于:2020-11-19 11:38
< >
分享
最佳答案
0

SELECT
NAME,
IF(LOCATE(1, GROUP_CONCAT(STATUS)) != 0 AND LOCATE(2, GROUP_CONCAT(STATUS)) != 0,"true","false")
FROM
test
GROUP BY
NAME

我恰芙蓉王 | 菜鸟二级 |园豆:296 | 2020-11-19 15:59
其他回答(3)
0

select name,flag=count(1) from #tt where status in (1,2) group by name

这样的结果就会没有flag=0的字段
或者这样就有0的数据

select name,flag=(select count(1) from #tt where name=a.name and status in (1,2)) from #tt a group by name

华临天下 | 园豆:1452 (小虾三级) | 2020-11-19 11:55

貌似不行。。。

支持(0) 反对(0) 我恰芙蓉王 | 园豆:296 (菜鸟二级) | 2020-11-19 12:02

@我恰芙蓉王: 我用的是Sql Server,也不至于mysql 不行吧

支持(0) 反对(0) 华临天下 | 园豆:1452 (小虾三级) | 2020-11-19 13:38
0

SELECT NAME, COUNT(1) AS flag
FROM test
WHERE STATUS IN(1,2)
GROUP BY NAME
HAVING COUNT(1)=2

E行者 | 园豆:1741 (小虾三级) | 2020-11-19 12:36

。。。。

支持(0) 反对(0) 我恰芙蓉王 | 园豆:296 (菜鸟二级) | 2020-11-19 12:56
0
select DISTINCT name, '1' as flag from test where status = 1 or status = 2
会长 | 园豆:10269 (专家六级) | 2020-11-19 13:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册