mysql case when & concat & SUBSTRING_INDEX & not & having 使用的小case

1. 代码

SELECT
    a.id,
    a.activity_name,
    (
        CASE
        WHEN a.activity_end_time > now() THEN
            '参与中'
        ELSE
            (
                CASE
                WHEN (
                    a.activity_doubt <> '*'
                    AND a.activity_doubt < c.doubt
                )
                OR (
                    a.activity_praise <> '*'
                    AND a.activity_praise > c.praise * 100
                ) THEN
                    '未达标'
                ELSE
                    '已达标'
                END
            )
        END
    ) AS state,
    c.driver_id,
    c.driver_phone,
    c.driver_name,
    c.count
FROM
    (
        SELECT
            id,
            activity_name,
            activity_end_time,
            SUBSTRING_INDEX(
                driver_award_condition,
                "-",
                1
            ) AS activity_doubt,
            SUBSTRING_INDEX(
                driver_award_condition,
                "-",
                - 1
            ) AS activity_praise
        FROM
            car_biz_numprize_base AS b
        WHERE
            1 = 1
        AND activity_name LIKE concat(concat('%', '数据'), '%')
        AND id = 1
        AND NOT (
            (
                activity_start_time > '2017-10-27 17:16:00'
            )
            OR (
                activity_end_time < '2017-10-27 17:10:00'
            )
        )
    ) AS a
INNER JOIN (
    SELECT
        i.driver_id,
        i.driver_phone,
        i.driver_name,
        i.numprize_base_id,
        count(order_no) AS count,
        sum(order_doubt) AS doubt,
        sum(order_praise) / count(order_no) AS praise
    FROM
        car_biz_numprize_order_item i
    WHERE
        1 = 1
    AND driver_id = 1000063
    GROUP BY
        i.driver_id,
        i.numprize_base_id
) AS c ON a.id = c.numprize_base_id
HAVING
    state = '未达标' order by a.created_time desc, c.driver_id asc
LIMIT 0,
 10

2. 需求的来源

 2.1 符合活动条件的订单 达标情况查询 如下页面所示 2-1

2.2  活动相关的表

活动表2-2

符合条件订单表2-3

2.1图中 活动参与状态的查询条件 是在这两个表中不存在的字段

   需从活动表2-2中 获取 driver_award_condition列 并分割条件 然后对 2-1表进行运算 然后再帅选

 2.4 如果在mybatis中 拼sql 小于 大于号 放在 <![ CDATA [>]]>中

 SELECT SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX("aa,bb,cc,dd", ",", 1)), ",", 1);    #aa  
SELECT SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX("aa,bb,cc,dd", ",", 2)), ",", 1);    #bb        
SELECT SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX("aa,bb,cc,dd", ",", 3)), ",", 1);    #cc
SELECT SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX("aa,bb,cc,dd", ",", 4)), ",", 1);    #dd

3.总结

复杂的sql 是一步一步写出来的

转载于:https://www.cnblogs.com/rocky-fang/p/7767735.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值