huliguo
4 天以前 11ec7ac8f4832c4274cf61a19cc35cda3de9e0e5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?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="com.linghu.mapper.KeywordMapper">
 
    <resultMap id="BaseResultMap" type="com.linghu.model.entity.Keyword">
            <id property="keyword_id" column="keyword_id" jdbcType="INTEGER"/>
            <result property="order_id" column="order_id" jdbcType="VARCHAR"/>
            <result property="keyword_name" column="keyword_name" jdbcType="VARCHAR"/>
            <result property="num" column="num" jdbcType="INTEGER"/>
            <result property="task_id" column="task_id" jdbcType="VARCHAR"/>
            <result property="status" column="status" jdbcType="VARCHAR"/>
    </resultMap>
 
    <sql id="Base_Column_List">
        keyword_id,order_id,keyword_name,
        num,task_id,status
    </sql>
    <select id="statics" resultType="com.linghu.model.vo.KeywordStaticsVO">
        SELECT
        p.platform_name,
        SUM( r.repetition_num ) AS total_repetitions,
        ROUND(
        SUM( r.repetition_num ) * 100.0 / (
        SELECT
        SUM( r2.repetition_num )
        FROM
        reference r2
        WHERE
        r2.keyword_id = #{keywordId}
        <if test = "questionId != null" >
            AND r2.question_id = #{questionId}
        </if>
        AND r2.num = #{num}
        ),2) AS repetition_ratio
        FROM
        reference r
        JOIN platform p ON r.platform_id = p.platform_id
        WHERE
        r.keyword_id = #{keywordId}
        <if test = "questionId != null" >
            AND r.question_id = #{questionId}
        </if>
        AND r.num = #{num}
 
        GROUP BY
        p.platform_id,
        p.platform_name
        ORDER BY
        total_repetitions DESC
    </select>
    <select id="getResultByTypeId" resultType="com.linghu.model.vo.PlatformProportionVO">
        SELECT
            t.type_name,
            p.platform_name,
            SUM(r.repetition_num) AS total_repetitions,
            -- 全平台分布占比 = 当前平台重复次数 / 所有平台重复次数
            ROUND(SUM(r.repetition_num) * 100.0 / (
                SELECT SUM(r2.repetition_num)
                FROM reference r2
                WHERE r2.keyword_id = #{keywordId}
                <if test="questionId != null">
                    AND r2.question_id = #{questionId}
                </if>
                AND r2.num = #{num}
            ), 2) AS all_platform_ratio,
            -- 同类平台分布占比 = 当前平台重复次数 / 同类型平台重复次数
            ROUND(SUM(r.repetition_num) * 100.0 / (
                SELECT SUM(r3.repetition_num)
                FROM reference r3
                JOIN platform p3 ON r3.platform_id = p3.platform_id
                WHERE r3.keyword_id = #{keywordId}
                <if test="questionId != null">
                    AND r3.question_id = #{questionId}
                </if>
                AND r3.num = #{num}
                AND p3.type_id = p.type_id
            ), 2) AS same_type_ratio
        FROM
        reference r
        JOIN
        platform p ON r.platform_id = p.platform_id
        JOIN
        type t ON p.type_id = t.type_id
        WHERE
            r.keyword_id = #{keywordId}
            <if test="questionId != null">
                AND r.question_id = #{questionId}
            </if>
            AND r.num = #{num}
            <if test="typeId != null">
                AND p.type_id = #{typeId}
            </if>
        GROUP BY
        t.type_id, t.type_name, p.platform_id, p.platform_name
        ORDER BY
        t.type_name, total_repetitions DESC
    </select>
    <select id="getResultByPlatformId" resultType="com.linghu.model.vo.ResultListVO">
        SELECT
            r.reference_id,
            p.platform_name,
            r.title,
            r.repetition_num,
            r.create_time,
            r.url
        FROM
        reference r
        JOIN
        platform p ON r.platform_id = p.platform_id
        WHERE
            r.keyword_id = #{keywordId}
            <if test="questionId != null">
                AND r.question_id = #{questionId}
            </if>
            AND r.num = #{num}
            <if test="platformId != null">
                AND r.platform_id = #{platformId}
            </if>
        ORDER BY
        r.create_time DESC
    </select>
</mapper>