如何解决如何通过带有限制的某些过滤器来计算查询中表的所有行?
我将尝试更具体一点,让我们假设我有这个查询:
SELECT * FROM users WHERE status = 1 LIMIT 5;
在我的表users
中,我有40位用户的状态为5,但是在我的查询中,我限制为5,这是我想做的。
但是现在,我需要统计状态为1的所有用户(无限制),在这种情况下,有40个用户具有该状态。
如何在不进行其他查询的情况下做到这一点?
我不想进行其他查询,因为在查询中我确实在工作,所以我有更多的过滤器,并且我认为使用相同过滤器(限制除外)进行两次查询会浪费掉不必要的资源我的服务器。
我也不想从查询中删除LIMIT 5
并在代码中输入5,因为我有太多处于该状态的用户,并让所有这些用户成为不必要的用户,
我认为必须有更好的方法,您能帮我吗?
解决方法
如果您使用的是MariaDB或MySQL 8+的最新版本,则可以在此处使用COUNT
作为窗口函数:
WITH cte AS (
SELECT *,COUNT(*) OVER () AS cnt
FROM users
WHERE status = 1
)
SELECT *
FROM cte
ORDER BY some_column
LIMIT 5;
请注意,在没有LIMIT
的情况下使用ORDER BY
毫无意义,因为在这种情况下,您并没有告诉数据库哪个想要五个记录。添加ORDER BY
子句以获得最佳效果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。