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 是一步一步写出来的

时间: 2024-10-14 19:04:18

mysql case when & concat & SUBSTRING_INDEX & not & having 使用的小case的相关文章

MySQL数据库查询 concat 字段合并 身份证 名字手机号脱敏 case when等

身份证号脱敏: CONCAT(LEFT(ui.idcard,6),'****',RIGHT(ui.idcard,4)) as 身份证号 , 姓名脱敏: CONCAT(LEFT(o.custom_name,1),'**') as 客户姓名 , 手机号脱敏: CONCAT(LEFT(o.custom_phone,3),'****',RIGHT(ui.idcard,4)) as 客户手机号, case when: case when c.on_time = 0 then 0 when c.on_tim

mysql中采用concat来拼接中文字符乱码解决方式(转)

mysql中采用concat来拼接中文字符乱码解决方式 - fuxuejun的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/fuxuejun/article/details/6284725 mysql concat乱码问题解决 concat(str1,str2) 当concat结果集出现乱码时,大都是由于连接的字段类型不同导致,如concat中的字段参数一个是varchar类型,一个是int类型或doule类型,就会出现乱码. 解决方法:利用mysql的字符

MySQL教程之concat以及group_concat的用法

MySQL教程之concat以及group_concat的用法 本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null. 3.举例: 例1:select concat (id, name, score) as info from tt2; 中间有一行为null是因为tt2表中有一行的score值为n

超级猜图,小case,运用知识点: storyboard block封装变化点 蒙板 模态model

最近这几天,不知道突然玩超级猜图玩疯了,最后觉得还是不过瘾,干脆下了ipa,运用素材自己写了一个,没想到居然实现了大部分功能,真开心,直接上图:     上代码,不足之处,还望牛人支出,不胜感激: 1 #import "JHViewController.h" 2 #import "JHAppDate.h" 3 4 @interface JHViewController () 5 { 6 NSArray *_arrayImage; // 内容数组 7 int _ind

MySQL中函数CONCAT及GROUP_CONCAT

一.CONCAT()函数CONCAT()函数用于将多个字符串连接成一个字符串.使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为+----+--------+| id | name   |+----+--------+|  1 | BioCyc |+----+--------+1.语法及使用特点:CONCAT(str1,str2,-)                       返回结果为连接参数产生的字符串.如有任何一个参数为NULL

mysql GROUP_CONCAT+ GROUP BY + substring_index获取分组的前几名

mysql方法来源于:http://www.cnblogs.com/jjcc/p/5896588.html ###在网上看到一篇,非常赞的方法 比如说要获取班级的前3名,mysql就可以用GROUP_CONCAT  + GROUP BY + substring_index实现. 考试表 DROP TABLE IF EXISTS `test`;CREATE TABLE `test` (`id` int(11) DEFAULT NULL,`name` varchar(20) DEFAULT NULL

MySql中的concat()相关函数

concat 函数的基本应用一: SQL CONCAT函数用于将两个字符串连接起来,形成一个单一的字符串.试试下面的例子: SQL> SELECT CONCAT('FIRST ', 'SECOND'); +----------------------------+ | CONCAT('FIRST ', 'SECOND') | +----------------------------+ | FIRST SECOND | +----------------------------+ 1 row i

MySQL中函数CONCAT及GROUP_CONCAT(aggregate)

一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +----+--------+ | id | name   | +----+--------+ |  1| BioCyc | +----+--------+ 1.语法及使用特点: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL.可

mysql 函数之 concat

concat函数的使用 concat(str1,str2,...) 返回的结果是参数连接后产生的字符串,如果有任何一个参数为null,则返回结果为null.  mysql> select concat('My','s','ql'); +-----------------------+ | concat('My','s','ql') | +-----------------------+ | Mysql                 | +-----------------------+ 1 r