sql - 如何从您的子查询表中打印两个属性值
问题描述
假设我有两张桌子,
- 用户
- 邮政
帖子由用户发布(即帖子表将具有user 的外键)
现在我的问题是,
打印所有帖子超过 10 个的用户的详细信息
为了解决这个问题,我可以输入以下查询,它会给我想要的结果,
SELECT * from USER where user_id in (SELECT user_id from POST group by user_id having count(user_id) > 10)
当我还想打印帖子计数以及用户详细信息时,就会出现问题。现在无法从 USER 表中获取用户计数。这只能从 POST 表中完成。但是,我无法从我的子查询中获取两个值,即我无法执行以下操作,
SELECT * from USER where user_id in (SELECT user_id, **count(user_id)** from POST group by user_id having count(user_id) > 10)
那么,我该如何解决这个问题呢?我知道的一个解决方案是这样,但是我认为这将是解决这个问题的一种非常天真的方法,并且会使查询更加复杂,也更加缓慢,
SELECT u.*, (SELECT po.count(user_id) from POST as po group by user_id having po.count(user_id) > 10) from USER u where u.user_id in (SELECT p.user_id from POST p group by user_id having p.count(user_id) > 10)
有没有其他方法可以使用子查询来解决这个问题?
解决方案
将聚合移动到from
子句:
SELECT u.*, p.num_posts
FROM user u JOIN
(SELECT p.user_id, COUNT(*) as num_posts
FROM post p
GROUP BY p.user_id
HAVING COUNT(*) > 10
) p
ON u.user_id = p.user_id;
您可以使用子查询执行此操作:
select u.*
from (select u.*,
(select count(*) from post p where p.user_id = u.user_id) as num_posts
from users u
) u
where num_posts > 10;
使用索引post(user_id)
,这实际上可能比使用JOIN
/的版本具有更好的性能GROUP BY
。
推荐阅读
- html - 列中的 CSS 显示列表
- groovy - 上一年的开始
- c++ - 在返回值容器类型中使用类型参数
- css - 使用 TailwindCSS 悬停时的环形颜色
- logging - 当批处理失败时,是否有任何适当的日志记录机制使用我捕获通过 Cron 作业安排的数据移动 jar 文件的日志?
- wordpress - wp_kses_post 函数中允许使用哪些 HTML?
- java - 在没有密码的Java中以管理员身份运行CMD
- vue.js - 使用目标“Web 组件”构建 Vue 应用程序 - 未应用 SCSS 样式?
- r - 使用 ggplot2 绘制箱线图时重新排序 x 轴的问题
- java - 如何在 RESTful Springboot 应用程序中使用带有 Java 的外部 API