mysql 列变行.

注意when后多个满足条件时, 会只取一个, 不会报错.
select max(case when then)


mysql中的变量@var在mybatis xml中使用

必须在数据库配置文件的数据库地址url中加上一个属性allowMultiQueries=true
参考: MySQL设置变量以及如何在Mybatis中使用


Java Stream peek vs. map

两个函数的返回值都是一个新的Stream,但是接收类型 peek是Consumer,map是Function
使用场景:
对象数组的集合流, peek 为遍历数组, 对item进行处理; map为获取出某个属性或对整个item进行处理后返回

参考:
Java Stream peek vs. map
Java 8 Stream Api 中的 peek 操作


mysql insert select 表

mysql insert t1(v1, v2, v3) select v1, v2, v3 from t2
中间不要value 或 values


MySQL FIELD() 函数的用法

FIELD(str,str1,str2,str3,...)

1. 与order by 组合使用, 让字段按照后续字典表中的内容排序

select * from demo order by field(review_status, 2, 3, 1), 其中review_status为字段名
field()后可以跟descasc

  • asc(默认): 按照表顺序(231), 且不存在231中的数据排在前面, 231的数据在最后
  • desc: 按照表降序(132), 且不存在132中的数据排在后面, 132的数据在最前面

2. 单独使用, 求出第一个值在后列表中的位置(从1开始)

  • 第一个值是数字或字符串: select field(1, 1, 2, 3, 4, 5) res 结果是1
  • 第一个值是语句: select field((select id from (SELECT * FROM demo where id = 1) tt), 4, 1, 2, 1, 3) res 结果是2(后面多个1是取第一个的索引)
  • 后面存在语句select field(1, (select id from (SELECT * FROM demo where id in (1, 2, 3)) tt)) res 运行报错Subquery returns more than 1 row, 表示子查询返回多列, 如果其他地方遇到这种情况需要使用limit 1或关键词anysome等等
  • 补充: 当后面列表中不存在第一个值 或 第一个值为null时 返回0