mysql - 从嵌套选择语句中检索计数
问题描述
我有以下查询,它完全按预期工作(感谢 stackoverflow 的乐于助人的人)。但是,我意识到除了使用计数来验证消息是否 <= 3 之外,我还想检索结果中返回的每一行的实际数量/计数。
这样我就可以根据每个返回的用户有多少消息来自定义逻辑。
我尝试了几种不同的选择,但效果不佳。
SELECT u.*
FROM users u
WHERE
NOT EXISTS (
SELECT 1
FROM events e
WHERE e.user_id = u.id AND e.type = 'collection'
)
AND (
SELECT COUNT(*)
FROM messages m
WHERE m.user_id = u.id AND m.message_type = 'collection_reminder'
) <= 3
AND u.admin IS NULL
解决方案
将该子查询移至选择列表。将条件放在having
最后的子句中(MySQL 特殊技巧)。
SELECT u.*,
(
SELECT COUNT(*)
FROM messages m
WHERE m.user_id = u.id AND m.message_type = 'collection_reminder'
) as cnt
FROM users u
WHERE
NOT EXISTS (
SELECT 1
FROM events e
WHERE e.user_id = u.id AND e.type = 'collection'
)
AND u.admin IS NULL
HAVING cnt <= 3
推荐阅读
- python - 使用 2 个参数在 df 中创建新列
- swift - 努力弄清楚如何使用 UserDefault 让用户保持登录状态
- python - Django 无法在页面上显示登录错误
- r - 每个列表列中的唯一计数
- python - 将 Pandas 系列转换为保留索引的列表
- c# - 问题转换 json 对象
- javascript - Javascript:如何从给定的 HH:MM:SS 开始秒表?
- html - 选择文件后引导文件选择字段未更新
- python-3.x - 在 Sqlite/Python 中执行不区分大小写的 LEFT JOIN 的最有效方法是什么?
- swift - 核心数据:可转换类型还是多对多关系?