首页 > 数据库 >ShardingSphere + Pagehelper 组合sql查询中包含 DISTINCT GROUP BY 等关键字和聚合函数时,导致报错

ShardingSphere + Pagehelper 组合sql查询中包含 DISTINCT GROUP BY 等关键字和聚合函数时,导致报错

时间:2023-05-17 16:23:56浏览次数:73  
标签:count GROUP DISTINCT sql dc content 报错 time

  

Pagehelper 中配置说明
  1. params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero

  2. supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest


Pagehelper 配置 supportMethodsArguments 为true ,当sql传入条件中包含 pageNum pageSize 时会自动分页 ,此时如果sql中使用了DISTINCT GROUP BY 等关键字和聚合函数时,Pagehelper会先查询表名为
table_count的总条数的sql,这时ShardingSphere 就会匹配不到对应的分表导致报错

SELECT count(0) FROM (SELECT DISTINCT DATE_FORMAT(dc.content_time, '%Y-%m-%d %H:%i') content_time FROM sys_data_content AS dc
WHERE dc.content_time BETWEEN ? AND ? GROUP BY content_time) table_count
# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql

解决 :

Pagehelper 提供了自定义count搜索,在xml文件中加上 方法名 +"_COUNT ",会率先匹配该方法的sql
此时执行的分页sql为
SELECT COUNT(0) FROM sys_data_content AS dc WHERE dc.content_time between #{startTime} and #{endTime} GROUP BY content_time ORDER BY content_time ASC
<select id="findTime" resultType="java.lang.String">
        SELECT DISTINCT
            DATE_FORMAT( dc.content_time, '%Y-%m-%d %H:%i' ) content_time
        FROM
            sys_data_content AS dc
        <where>
            <trim prefixOverrides="AND">
                <if test="startTime != '' and startTime != null and endTime != '' and endTime != null">
                    AND dc.content_time between #{startTime} and #{endTime}
                </if>
            </trim>
        </where>
        GROUP BY
            content_time
        ORDER BY
            content_time ASC
    </select>

    <select id="findTime_COUNT" resultType="java.lang.Long">
        SELECT
            COUNT(0)
        FROM
        sys_data_content AS dc
        <where>
            <trim prefixOverrides="AND">
                <if test="startTime != '' and startTime != null and endTime != '' and endTime != null">
                    AND dc.content_time between #{startTime} and #{endTime}
                </if>
            </trim>
        </where>
        GROUP BY
            content_time
        ORDER BY
            content_time ASC
    </select>

 

标签:count,GROUP,DISTINCT,sql,dc,content,报错,time
From: https://www.cnblogs.com/SeaWxx/p/17409115.html

相关文章

  • PowerShell里cd文件夹报错,是因为文件名称中包含空格
    PowerShell里cd文件夹报错,是因为文件名称中包含空格。需要将文件包在引号中。 cd"C:\ProgramFiles"  ......
  • Pandas GroupBy 使用教程
    实例1将分组后的字符拼接importpandasaspddf=pd.DataFrame({'user_id':[1,2,1,3,3],'content_id':[1,1,2,2,2],'tag':['cool','nice','clever','clever','not-bad']})df将d......
  • vue设置全局scss,报错
    sass-loader版本问题引发的错误:optionshasanunknownproperty'prependData'.Thesepropertiesarevalid当前版本如下:"sass":"^1.32.7","sass-loader":"^12.0.0",原来的写法:css:{loaderOptions:{sass:{......
  • Linux下创建线程报错‘pthread_create’未定义的引用
    报错如下:我查找了网页上的解决方案,发现多数是因为编译链接时没有加-lpthread可是我加了,一直都在用;最终找出问题所在:函数名写错了pthread_create()而不是pthread_creat()细心是一种美好品质,希望我能尽快拥有它。......
  • 【git】报错解决方案-'pre -commit hook failed (add --no-verify to bypass)'
    git-commit报错: 可以看到这个报错有两点,第一点是因为npm缓存问题,第二点是pre-commit导致的commit报错pre-commit钩子都被存储在Git目录下的hooks子目录中。当你用gitinit初始化一个新版本库时,Git默认会在这个目录中放置一些示例脚本。这些脚本除了本身可以被......
  • 【git】报错解决方案-'This is probably not a problem with npm. There is likely ad
    git-commit报错: 原因:npm缓存造成的解决方案: 删除packpackage-lock.json,删除所有依赖,执行npmcacheclean--forcenpminstall......
  • Windows的disk报错代码153和SCSI代码简要分析
    SCSI报错代码示例Windows服务器上频繁出现event上来源为disk,ID为153的事件,并且影响到了数据库业务的正常运行。点击该事件的详细信息,可以看到对应的SCSI读写请求及其状态。上文scsi的译义如下:offset29SCSISatus为00,译义为SCSISTAT_GOOD,对应SCSI端口和驱动。offset30S......
  • python 项目报错 Fatal Python error: _enter_buffered_busy: could not acquire lock
    FatalPythonerror:_enter_buffered_busy:couldnotacquirelockfor<_io.BufferedWritername=''>atinterpretershutdown,possiblyduetodaemonthreadsPythonruntimestate:finalizing(tstate=0x00005654c4008a40)Currentthread0x00007fc......
  • RN安装app时报错unable to load script的解决方法
     时间:2023/05/17 报错截图如下所示:解决方法:在安装app时不使用默认端口8081,而是指定空闲端口,具体指令如下所示:npxreact-nativerun-android--port=8082本人是在win10环境中运行RN的,感觉这里安装报错主要是由于端口冲突,所以通过指定空闲端口就可以解决。 参考:1......
  • JPA 级联更新报错(all-delete-orphan)
    报错内容:nestedexceptionisorg.hibernate.HibernateException:Acollectionwithcascade="all-delete-orphan"wasnolongerreferencedbytheowningentityinstance:com.**.**.bo.requirementForm.entities.RequirementForm.hardwareList原因:级联更新集合字段是一个持......