SQL文中包含distinct的情况下,获取到的总件数是distinct前的件数。 因为SQL为:SELECT DISTINCT COUNT(*) FROM XXX 应该把distinct放在count内或者count的时候放在最外层。
分页查询的时候,需要获取总件数,场景如下: 比如SQL文为:【select distinct a.col1,a.col2 from test a 】这时候实际件数为10件,其中重复的有5件。 框架拼出来的总件数检索SQL-_COUNT文为:【SELECT DISTINCT COUNT(*) FROM test a】 这样获取到的件数为distinct之前的件数,为10件。但实际应该是5件(去重之后的件数)
原提问者GitHub用户brood-wangxr
在使用DISTINCT关键字进行查询时,如果使用COUNT函数来获取查询结果的总件数,可能会出现总件数获取错误的情况。这是因为COUNT函数会将DISTINCT关键字内的所有列作为一个整体进行计算,从而导致总件数的计算不准确。
为了解决这个问题,可以使用子查询来获取DISTINCT关键字内的查询结果,然后再对子查询的结果进行COUNT计算。例如,假设您要查询表中不重复的用户数量,可以使用以下SQL语句:
Copy
SELECT COUNT(*) FROM (SELECT DISTINCT user_id FROM table_name) tmp;
在这个SQL语句中,我们使用了一个子查询来获取DISTINCT关键字内的查询结果,然后对子查询的结果进行COUNT计算。这样可以确保总件数的计算正确性。
另外,如果您使用的是MySQL数据库,还可以使用SQL_CALC_FOUND_ROWS关键字和FOUND_ROWS()函数来获取查询结果的总件数。具体来说,您可以使用以下SQL语句:
Copy
SELECT SQL_CALC_FOUND_ROWS DISTINCT user_id FROM table_name;
SELECT FOUND_ROWS();
在这个SQL语句中,我们首先使用SQL_CALC_FOUND_ROWS关键字来告诉MySQL计算查询结果的总件数,然后在查询结束后使用FOUND_ROWS()函数来获取总件数。这种方法可以避免使用子查询,同时也可以确保总件数的计算正确性。
PageUtils支持count(distinct)实现啊
String sql = "select distinct a.col1,a.col2 from test a"; String result = PagerUtils.count(sql, JdbcConstants.MYSQL); assertEquals("SELECT DISTINCT COUNT(*)\n" + "FROM test a", result);
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。