Sql 查询仅具有非活动推送令牌的用户
我有一张这样的桌子Sql 查询仅具有非活动推送令牌的用户,sql,postgresql,push-notification,Sql,Postgresql,Push Notification,我有一张这样的桌子 # select u.name, pt.active from users u join push_tokens pt on u.id = pt.user_id; User | active push token -----+------------------ 1 | t 1 | f 2 | t 2 | t 3 | f 3 | f 4 | f 5 | t 我希望看到所有只有非活动推送令牌的用户,即用户3和4。这有助于我猜测
# select u.name, pt.active from users u join push_tokens pt on u.id = pt.user_id;
User | active push token
-----+------------------
1 | t
1 | f
2 | t
2 | t
3 | f
3 | f
4 | f
5 | t
我希望看到所有只有非活动推送令牌的用户,即用户3和4。这有助于我猜测哪些用户卸载了我的应用程序
对此的最佳查询是什么?使用
分组方式和拥有<如果至少有一个输入为真,则code>bool_或
返回真,否则返回假
select u.name
from users u
join push_tokens pt on u.id = pt.user_id
group by u.name
having not bool_or(pt.active)
这假定active
列是boolean
数据类型。使用groupby
和having
<如果至少有一个输入为真,则code>bool_或
返回真,否则返回假
select u.name
from users u
join push_tokens pt on u.id = pt.user_id
group by u.name
having not bool_or(pt.active)
这假设active
列是boolean
数据类型。通常更快:
SELECT u.* -- or just columns you need
FROM users u
WHERE NOT EXISTS (
SELECT FROM push_tokens
WHERE user_id = u.id
AND active -- assuming boolean NOT NULL
);
假设只有非活动推送令牌的用户等于设置中没有活动推送令牌的用户(包括根本没有推送令牌的用户)
(用户id)
上的普通btree索引很有帮助-您很可能已经有了
如果您经常使用此查询,并且push\u tokens
的行数多于几行,那么启用(user\u id,active)
会更好
如果只有一小部分行处于活动状态
,a将使其速度更快,但:
CREATE INDEX foo_idx ON push_tokens (user_id) WHERE active;
通常速度要快得多:
SELECT u.* -- or just columns you need
FROM users u
WHERE NOT EXISTS (
SELECT FROM push_tokens
WHERE user_id = u.id
AND active -- assuming boolean NOT NULL
);
假设只有非活动推送令牌的用户等于设置中没有活动推送令牌的用户(包括根本没有推送令牌的用户)
(用户id)
上的普通btree索引很有帮助-您很可能已经有了
如果您经常使用此查询,并且push\u tokens
的行数多于几行,那么启用(user\u id,active)
会更好
如果只有一小部分行处于活动状态
,a将使其速度更快,但:
CREATE INDEX foo_idx ON push_tokens (user_id) WHERE active;
完美的感谢您向我介绍
bool\u或Perfect!感谢您向我介绍bool\u或