SQL利用Case When Then多条件判断
第一种用法
用一个SQL语句完成不同条件的分组。这是一种用法 抄别人的 合组合函数一起使用
有如下数据
国家(country) 性别(sex) 人口(population)
中国 1 340
中国 2 260
美国 1 45
美国 2 55
加拿大 1 51
加拿大 2 49
英国 1 40
英国 2 60
按照国家和性别进行分组,得出结果如下
国家 男 女
中国 340 260
美国 45 55
加拿大 51 49
英国 40 60
普通情况下,用UNION也可以实现用一条语句进行查询。但是那样增加消耗(两个Select部分),而且SQL语句会比较长。
下面是一个是用Case函数来完成这个功能的例子
SELECT country,
SUM( CASE WHEN sex = '1' THEN
population ELSE 0 END), --男性人口
SUM( CASE WHEN sex = '2' THEN
population ELSE 0 END) --女性人口
FROM Table_A
GROUP BY country;
这样我们使用Select,完成对二维表的输出形式,充分显示了Case函数的强大。
SUM( CASE WHEN sex = '1' THEN population ELSE 0 END),
求合 取sex = "1" 的 population 的 SUM合 否则 取 0 结束
SUM 求和
CASE WHEN 条件就像where 之后一样的写法
THEN 取谁
(ELSE 否则取)在这里没什么用 因为 你不会说匹配不到 A列就去匹配 B列
END 结束
第二种用法
SELECT
id,
NAME,
cj,
( 判断 cj
CASE
WHEN cj < 60 THEN 返回'不及格'
'不及格'
WHEN cj BETWEEN 60 返回'良好'
AND 90 THEN
'良好'
WHEN cj > 90 THEN 返回'优秀'
'优秀'
END
) AS 状态 返回名称是状态
FROM
stud
<select id="updateDayTotalPointAndBalance" resultType="java.util.HashMap" parameterType="java.util.HashMap" >
SELECT
SUM(case when type = 1 then total end) as dailyRechargeBalanceSum,
SUM(case when type = 2 then total end) as dailyConsumptionBalanceSum
from `transaction`
where
card_id = 1718878536
AND created LIKE "2018-07-13%"
</select>
Map<String,Orders> paramMap = new HashMap<>();
paramMap = transactionDao.updateDayTotalPointAndBalance(paramMap);
JAVA学习网站
http://how2j.cn?p=73013