zxl
2025-10-15 18a9f86a8c1fdb6c42c4212dcaa1de437f6f4861
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
<?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="cn.lili.modules.lmk.mapper.LmkOrderSelectMapper">
    <resultMap id="OrderCountByDayMap" type="java.util.Map">
        <result column="day" property="day" />
        <result column="count" property="count"/>
    </resultMap>
 
    <resultMap id="orderTimePeriod" type="java.util.Map">
        <result column="day" property="day" />
        <result column="hour" property="hour"/>
    </resultMap>
 
    <resultMap id="productRepurchase" type="java.util.Map">
        <result column="goods_name" property="goodsName"/>
        <result column="repurchase_rate_percent" property="repurchaseRate"/>
    </resultMap>
 
    <resultMap id="viewDataCount" type="java.util.Map">
        <result column="day" property="day" />
        <result column="hour" property="hour"/>
        <result column="count" property="count"/>
    </resultMap>
 
    <select id="selectOrderCountByDay"  resultMap="OrderCountByDayMap">
        SELECT
            DATE(create_time) AS day,
            COUNT(*) AS count
            FROM
            li_order o
            WHERE
            o.create_time BETWEEN #{startTime} AND #{endTime}
            GROUP BY
            day
            ORDER BY
            day ASC
    </select>
 
    <select id="selectOrderTimePeriod" resultMap="orderTimePeriod">
        SELECT
            DATE(create_time) AS day,
            HOUR(create_time) AS hour,
            COUNT(*) AS count
            FROM
            li_order o
            WHERE
            o.create_time BETWEEN #{startTime} AND #{endTime}
            GROUP BY
            day
            ORDER BY
            day , hour ASC
    </select>
    <select id="selectViewDataCount" resultMap="">
        SELECT
            DATE(LAR.create_time) AS day,
            HOUR(LAR.create_time) AS hour,
            COUNT(LAR.id) AS count
        FROM lmk_action_record LAR
        where LAR.delete_flag = 0
          AND LAR.page_status = 'JOIN'
        GROUP BY day, hour
        ORDER BY day, hour;
    </select>
<!--buyer_count购买人数  buy_times总购买次数  repurchase_buyer_count 复购人数-->
    <select id="selectProductRepurchase"  resultMap="productRepurchase">
        SELECT
            t.goods_name,
            t.total_users AS buyer_count,
            t.total_buy_times AS buy_times,
            t.repurchase_users AS repurchase_buyer_count,
            ROUND(
                IFNULL(t.repurchase_users / t.total_users, 0) * 100,
                2
            ) AS repurchase_rate_percent
        FROM (
                 SELECT
                     goods_id,
                     goods_name,
                     COUNT(DISTINCT member_id) AS total_users,
                     SUM(user_buy_counts.buy_count) AS total_buy_times,
                     SUM(CASE WHEN buy_count >= 2 THEN 1 ELSE 0 END) AS repurchase_users
                 FROM (
                          SELECT
                              i.goods_id,
                              i.goods_name,
                              o.member_id,
                              COUNT(DISTINCT o.sn) AS buy_count
                          FROM li_order_item i
                              INNER JOIN li_order o ON i.order_sn = o.sn
                          WHERE
                              o.order_status = 'COMPLETED'
                            AND o.delete_flag = 0
                            AND i.delete_flag = 0
                            AND o.member_id IS NOT NULL
                            AND o.create_time >= #{startTime}
                            AND o.create_time &lt;= #{endTime}
                          GROUP BY i.goods_id, i.goods_name, o.member_id
                      ) AS user_buy_counts
                 GROUP BY goods_id, goods_name
             ) AS t
        ORDER BY repurchase_rate_percent DESC
        LIMIT #{currentLimit};
    </select>
 
</mapper>