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

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

  1. mysql中的concat,concat_ws(),group_concat()

    mysql中的concat,concat_ws(),group_concat() 说明: 本文中使用的例子均在下面的数据库表tt2下执行:     一.concat()函数 1.功能:将多个字符串连接 ...

  2. [转]MySQL中函数CONCAT及GROUP_CONCAT

    一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +-- ...

  3. Mysql学习笔记—concat以及group_concat的用法(转载)

    本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数产生的字 ...

  4. 使用Mysql中的concat函数或正则匹配来快速批量生成用于执行的sql语句

    背景介绍 今天需要给一张表里面补数据,需要按照行的维度进行update,如果是个别数据那么直接写update语句就可以了,但是场景要求的是将整表的数据进行update,要实现这个需求就不能只靠蛮力了, ...

  5. unittest自定义运行全量case or 运行指定的单个或多个case

    import unittest import os from case.zufang.test_api_area_rentProlist import Zf1 case_path = os.path. ...

  6. 计算mysql中某个字段某字符出现的次数,case when 和 截取字符的用法

    select LENGTH(type) - LENGTH(replace(type,'_','')) as counts from sa_log_olap where type like 'XX_XX ...

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

    mysql方法来源于:http://www.cnblogs.com/jjcc/p/5896588.html ###在网上看到一篇,非常赞的方法### 比如说要获取班级的前3名,mysql就可以用GRO ...

  8. MySQL中函数CONCAT及GROUP_CONCAT

    一.CONCAT()函数CONCAT()函数用于将多个字符串连接成一个字符串.使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为+----+ ...

  9. mysql中使用concat例子

    数据库为mysql,需要把旧门店记录的note字段的资料追加到新门店的note资料的后面 旧记录id为old_terminal_id,新记录id为new_terminal_id,提供格式如下:

随机推荐

  1. luogu4383 [八省联考2018]林克卡特树(带权二分+dp)

    link 题目大意:给定你 n 个点的一棵树 (边有边权,边权有正负) 你需要移除 k 条边,并连接 k 条权值为 0 的边,使得连接之后树的直径最大 题解: 根据 [POI2015]MOD 那道题, ...

  2. ipython 导入模块 非法ascii字符问题

    SyntaxError: Non-ASCII character '\xe2‘ ipython  使用了 python2    加入 #coding=utf-8 ipython3 使用 python3

  3. ZOJ - 3946-Highway Project(最短路变形+优先队列优化)

    Edward, the emperor of the Marjar Empire, wants to build some bidirectional highways so that he can ...

  4. Oracle远程数据建物化视图(materialized)创建简单记录,以及DBLINK的创建

    目的:实现远程数据库访问及其相应表的定时同步 一.远程数据库dblink的创建 select * from dba_db_links; select * from user_sys_privs;--查 ...

  5. Java框架-mybatis01查询单个数据

    1.什么是mybatis? mybatis是一个基于Java的持久层框架. 2.持久化:数据从瞬时状态变为持久状态. 3.持久层:完成持久化工作的代码块.---dao 4.Mybatis是帮助程序员将 ...

  6. mysql Access denied for user root@localhost错误解决方法总结

    原文:http://www.111cn.net/database/mysql/44142.htm Access denied for user 'root'@'localhost' (using pa ...

  7. (转)linux基本变量学习:位置变量$0 、$1 shift轮替、本地变量、环境变量、特殊变量

    原文:http://blog.51cto.com/woyaoxuelinux/1863045 shell: 弱类型编程语言 强:变量在使用前,必须事先声明,甚至还需要初始化: 弱:变量用时声明,甚至不 ...

  8. 局域网电脑之间ping不通解决办法

    局域网电脑之间ping不通一般都是防火墙的原因.解决办法有以下两种方法 1 第一种方法 1 找到Windows防火墙 2点击更改通知设置 3 关闭专用网络防火墙 现在就可以ping通这台机器了. 2  ...

  9. 关于数据库NULL值的几个问题思考

    最近在写项目,拼接SQL时,发现好多关于NULL值的问题,现在把这些问题整理出来,以供日后参考. 对于Oracle数据库: 一.排序 Oracle对于null值的排序,有一个函数可以进行操作: 在默认 ...

  10. Guava学习笔记:Optional优雅的使用null

    在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null.因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上 ...