国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【已解決】Mybatis 實(shí)現(xiàn) Group By 動(dòng)態(tài)分組查詢

這篇具有很好參考價(jià)值的文章主要介紹了【已解決】Mybatis 實(shí)現(xiàn) Group By 動(dòng)態(tài)分組查詢。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

??工作中遇到這樣一個(gè)需求場(chǎng)景:實(shí)現(xiàn)一個(gè)統(tǒng)計(jì)查詢,要求可以根據(jù)用戶在前端界面篩選的字段進(jìn)行動(dòng)態(tài)地分組統(tǒng)計(jì)。也就是說(shuō),后端在實(shí)現(xiàn)分組查詢的時(shí)候,Group By 的字段是不確定的,可能是一個(gè)字段、多個(gè)字段或者不進(jìn)行分組查詢,這都是由用戶在前端決定的。

??這里給出的實(shí)現(xiàn)方案:

  • 前端界面收集用戶需要分組統(tǒng)計(jì)的字段,然后將這些字段名組成一個(gè)字符串,字段名之間由逗號(hào)分隔,傳遞給后端。
  • 后端拿到分組字段名字符串再根據(jù)逗號(hào)分隔符進(jìn)行處理,拼裝成一個(gè)分組字段名列表。
  • 最后,利用 Mybatis 框架的動(dòng)態(tài) SQL 語(yǔ)句,實(shí)現(xiàn)動(dòng)態(tài)分組字段的統(tǒng)計(jì)查詢。

控制類(lèi)XxxStatisticsController實(shí)現(xiàn)代碼如下:

@RestController
@RequestMapping("/statistics")
public class XxxStatisticsController {

    @Autowired
    private XxxService xxxService;
   
    @Operation(method = GET_METHOD, summary = "xxx動(dòng)態(tài)分組統(tǒng)計(jì)直方圖", parameters = {
            @Parameter(name = "startDate", description = "開(kāi)始日期,形如:2023-07-01"),
            @Parameter(name = "endDate", description = "結(jié)束日期,形如:2023-07-10"),
            @Parameter(name = "groupFields", description = "需要分組的字段名稱,逗號(hào)分隔,形如“l(fā)evel,title”"),
            @Parameter(name = "title", description = "標(biāo)題")
    })
    @Login
    @GetMapping("/xxxStatistics")
    public Result<Map<String, List<StatisticsDO>>> xxxStatistics(
    														 @RequestParam String startTime,
                                                             @RequestParam String endTime,
                                                             @RequestParam(required = false) String groupFields,
                                                             @RequestParam(required = false) String title) {
        QueryBuilder builder = QueryBuilder.page(0).pageSize(1);                                                    
        // 此處省略若干代碼
        if (StringUtils.isNotBlank(groupFields)) {
            List<String> groupFieldList = Arrays.asList(groupFields.split(Constants.COMMA_SPLIT));
            builder.put("groupFieldList", groupFieldList);
        }
        return xxxService.xxxStatistics(builder.build());
    }
}

xxx-statistics-info-mapper.xml 文件代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-682034.html

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="XxxStatisticsInfoMapper">
    <resultMap id="default" type="XxxStatisticsInfoDO">
        <result column="id" property="id"/>
        <result column="title" property="title"/>
        <result column="xxx" property="xxx"/>
        <result column="xxx" property="xxx"/>
        <result column="xxx" property="xxx"/>
        <result column="xxx" property="xxx"/>
        <result column="xxx" property="xxx"/>
        <result column="xxx" property="xxx"/>
        <result column="create_time" property="createTime"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    
    <sql id="query">
        <if test="startTime != null and startTime != ''">
            AND alert_time &gt;= #{startTime}
        </if>
        <if test="endTime != null and endTime != ''">
            AND alert_time &lt;= #{endTime}
        </if>
    </sql>

    <sql id="queryByGroup">
        <if test="groupFieldList != null and groupFieldList.size() > 0">
            <!-- 這里根據(jù)前端傳入的參數(shù)拼接動(dòng)態(tài)的 GROUP BY 子句 -->
            GROUP BY
            <foreach item="field" collection="groupFieldList" separator=",">
                ${field}
            </foreach>
        </if>
    </sql>
    
    <select id="dynamicGroupStatistics" resultType="com.xxx.xxx.domain.DynamicGroupStatisticsDO">
        SELECT
        xxx,
        xxx,
        xxx,
        title,
        xxx,
        xxx,
        count(*) AS xxx_num
        FROM xxx_statistics_info
        <where>
            <include refid="query"/>
            <if test="title != null and title != ''">
                AND title = #{title}
            </if>
        </where>
        <include refid="queryByGroup"/>
        ORDER BY xxx_num DESC
        LIMIT 30
    </select>
</mapper>

到了這里,關(guān)于【已解決】Mybatis 實(shí)現(xiàn) Group By 動(dòng)態(tài)分組查詢的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • group by聚合分組后如何獲取分組數(shù)據(jù)

    group by聚合分組后如何獲取分組數(shù)據(jù)

    之前用group by分組后一直困惑怎么把分組后的數(shù)據(jù)拿到,因?yàn)榉纸M后同一組的只有一條數(shù)據(jù),最后發(fā)現(xiàn)了 group_concat函數(shù)。記錄一下,以后能用。 語(yǔ)法:group_concat( [distinct] 要連接的字段 [order by 排序字段 asc/desc ] [separator \\\'分隔符\\\'] ) 說(shuō)明:通過(guò)使用 distinct 可以排除重復(fù)值(去重

    2024年02月05日
    瀏覽(24)
  • elasticsearch的group by分組和sum求和

    最近在使用es查詢某個(gè)字段在特定查詢條件下的某個(gè)字段的求和時(shí),忘記了query語(yǔ)句是怎么寫(xiě)的,簡(jiǎn)單記錄一下,方便自己和他人查閱。 一 什么是elasticsearch? elasticsearch是一個(gè)分布式的使用 REST 接口的搜索引擎,簡(jiǎn)稱為ES,它是面向文檔的,可以存儲(chǔ)整個(gè)對(duì)象或文檔。 二:

    2024年02月12日
    瀏覽(15)
  • ES聚合分頁(yè)(group by分組后分頁(yè))

    案例:統(tǒng)計(jì)業(yè)務(wù)應(yīng)用流量數(shù)據(jù)

    2024年02月11日
    瀏覽(16)
  • Sql group by 分組取時(shí)間最新的一條數(shù)據(jù)

    Sql group by 分組取時(shí)間最新的一條數(shù)據(jù)

    1.取時(shí)間最新的記錄 不分組有重復(fù)(多條CreateTime一樣的都是最新記錄) 2.分組后取時(shí)間最新的記錄 3.如果Id是uuid類(lèi)型無(wú)法使用max(id)的解決辦法(使用開(kāi)窗函數(shù))

    2024年02月11日
    瀏覽(22)
  • MySQL修煉手冊(cè)4:分組與聚合:GROUP BY與HAVING的應(yīng)用

    MySQL修煉手冊(cè)4:分組與聚合:GROUP BY與HAVING的應(yīng)用

    MySQL數(shù)據(jù)庫(kù)的強(qiáng)大功能為我們提供了豐富的數(shù)據(jù)處理工具,其中GROUP BY與HAVING的應(yīng)用使得數(shù)據(jù)的分組與聚合變得更加靈活和高效。在本篇博客中,我們將深入研究GROUP BY與HAVING的基礎(chǔ)知識(shí),并通過(guò)實(shí)際案例,展示它們?cè)跀?shù)據(jù)分析中的強(qiáng)大威力。 首先,為了更好地演示GROUP BY與

    2024年02月01日
    瀏覽(18)
  • mysql通過(guò)group by分組取最大時(shí)間對(duì)應(yīng)的數(shù)據(jù),提供兩種有效方法。

    mysql通過(guò)group by分組取最大時(shí)間對(duì)應(yīng)的數(shù)據(jù),提供兩種有效方法。

    1、項(xiàng)目記錄表project_record的結(jié)構(gòu)和數(shù)據(jù)如下: 以下為項(xiàng)目記錄表 project_record 的所有數(shù)據(jù)。project_id為項(xiàng)目Id,on_project_time為上項(xiàng)目時(shí)間。(每一條數(shù)據(jù)代表著上某個(gè)項(xiàng)目(project_id)的時(shí)間(on_project_time)記錄) 2、我們的需求是:取出每個(gè)項(xiàng)目中最大上項(xiàng)目時(shí)間對(duì)應(yīng)的那條數(shù)據(jù)。

    2023年04月08日
    瀏覽(23)
  • MySQL報(bào)錯(cuò):sql_mode=only_full_group_by 4種解決方法含舉例,輕松解決ONLY_FULL_GROUP_BY的報(bào)錯(cuò)問(wèn)題

    MySQL報(bào)錯(cuò):sql_mode=only_full_group_by 4種解決方法含舉例,輕松解決ONLY_FULL_GROUP_BY的報(bào)錯(cuò)問(wèn)題

    ? 作為初學(xué)者,我們?cè)谑褂肕ySQL的時(shí)候總是會(huì)遇到各種各樣的報(bào)錯(cuò),讓人頭痛不已。其中有一種報(bào)錯(cuò),sql_mode=only_full_group_by,十分常見(jiàn),每次都是老長(zhǎng)的一串出現(xiàn),然后帶走你所有的好心情。 ?? 出現(xiàn)這樣的報(bào)錯(cuò),并不是因?yàn)槟愕拇a寫(xiě)得不好,而是因?yàn)樵贛ySQL 5.7后,MySQ

    2024年02月22日
    瀏覽(15)
  • MySQL Group by 優(yōu)化查詢

    ? 使用的是臨時(shí)表,加文件排序(數(shù)據(jù)量小用內(nèi)存排序) 注意:這里加的索引一般不會(huì)僅僅是group by后面的字段索引(大多數(shù)多少條件是一個(gè)以 該字段開(kāi)頭聯(lián)合索引 ,方便使用覆蓋索引或者索引下推)。如果該字段是一個(gè)varchar類(lèi)型, 最好 加個(gè)int冗余字段,建立索引的字段,

    2024年02月05日
    瀏覽(21)
  • MySQL使用GROUP BY分組后,獲取每組中時(shí)間記錄最新的行對(duì)應(yīng)的其他字段

    MySQL使用GROUP BY分組后,獲取每組中時(shí)間記錄最新的行對(duì)應(yīng)的其他字段

    在編寫(xiě)MySQL數(shù)據(jù)庫(kù)查詢語(yǔ)句時(shí),經(jīng)常遇到使用GROUP BY分組后,需要獲取每組中時(shí)間記錄最新的行對(duì)應(yīng)的其他字段這一情況。例如下表(t_score): id student course score examdate 1 小張 語(yǔ)文 89.0 2023-06-29 2 小張 數(shù)學(xué) 90.0 2023-06-29 3 小張 語(yǔ)文 91.0 2024-01-10 4 小張 數(shù)學(xué) 93.0 2024-01-10 5 小李 語(yǔ)

    2024年01月17日
    瀏覽(22)
  • PostgreSQL數(shù)據(jù)庫(kù)以任意時(shí)間間隔聚合查詢group by

    PostgreSQL數(shù)據(jù)庫(kù)以任意時(shí)間間隔聚合查詢group by

    我們做的是智慧交通信控平臺(tái),需要將實(shí)時(shí)采集到的交通大數(shù)據(jù)(信號(hào)機(jī)燈態(tài)、卡口過(guò)車(chē)、雷達(dá)數(shù)據(jù)等)全部入庫(kù),按照時(shí)間順序存儲(chǔ) 然后根據(jù)原始數(shù)據(jù),再計(jì)算出一些交通評(píng)價(jià)指標(biāo),存儲(chǔ)到數(shù)據(jù)庫(kù),供后續(xù)聚合查詢和分析統(tǒng)計(jì) 前端設(shè)備(信號(hào)機(jī)、雷達(dá)、卡口等)上報(bào)原始

    2024年02月02日
    瀏覽(94)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包