我有样本数据集
ID Name Active
1 Mii 0
1 Mii 1
2 Rii 0
2 Rii 1
3 Lii 0
4 Kii 0
4 Kii 1
5 Sii 0
如何获得其他ID的活动记录和非活动记录。
ID Name Active
1 Mii 1
2 Rii 1
3 Lii 0
4 Kii 1
5 Sii 0
我把所有的数据都放入了两个临时表中,因为有很多连接
select * from tmp1 where active = 1
UNION ALL
select * from tmp2 where active = 0 AND
NOT EXISTS (SELECT 1 FROM tmp1 WHERE Active = 1 )
有人能告诉我用MYSQL 写有更好的方法吗
假设active
只能是0
或1
,聚合可能会有所帮助:
SELECT id,
name,
max(active) active
FROM elbat
GROUP BY id,
name;
若在active
中存在具有id
和name
的具有1
的记录,则max(active)
为1
,如1 > 0
。否则,它是唯一的值0
。
使用分析函数:
select * from (
SELECT ID, NAME, RANK() OVER ( ORDER BY ACTIVE desc) AS RN
FROM TABLE1) a where rn = 1;