avatar

正进一步

只有喜欢,才会全情投入,才会成功!!!

不关注架构设计细节的程序员不是一个好架构师

  • Home
  • Tags
  • Categories
  • Archives
  • 2018寄语
日进一步_Group_By与分组过滤Having学习

WHERE过滤行,而HAVING过滤分组。HAVING支持所有WHERE操作符,HAVING子句中能使用聚集函数。WHERE在数据分组前进行过滤。HAVING在数据分组后进行过滤
where 可以单独用. having 必须跟group by一起用.
除聚集计算语句外,SELECT语句中的每个列都必须在GROUP BY子句中给出
当在查询中没有使用GROUP BY子句时,数据库就把数据表 中的所有行为作为一个组来处理


1
2
3
select sno,count(pno) from sc where grade>=90 group by sno having count(pno)>=2
select customer from orders group by customer having sum(orderPrice)<2000
select customer,sum(orderPrice) from orders where customer in ('Bush','Adams') group by customer having sum(orderPrice)>1500
1
2
3
4
5
6
select from_unixtime(ctime,'%Y-%m-%d') as dorderby,count(ctime)  as count
from order
where ctime > 1511712000 and status not in (3,9,18,20,30) and serv_type=0
group by from_unixtime(ctime,'%Y-%m-%d')
having count(ctime)>150
order by dorderby desc

group by可以可以使用函数; 并且可以将这个参数应用到select中.
order by 使用的列的名字是对结果集和默认中选出来的.

mysql之整数类型的显示宽度
  1. M和数据类型的取值范围是无关的
  2. M只是指明MYSQL最大可能显示的数字个数,数值的位数小于M时会有空格填充;大于M时,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能显示出来
  3. M的效果需要配合zerofill使用
foreach的集合为null会抛出异常

##foreach的集合为null,会抛出异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 List<String> arr  = Lists.newArrayList("112");
//iterator 不会报出异常; 遍历 倒是可以
for(String str: arr){
// arr.remove(0);
System.out.println(str);
}

List<String> arr2 = null;
//报出空指针异常
for(String str: arr2){
//iterator 不会异常; foreach会异常
// arr.remove(0);
System.out.println(str);
}
Redis_String讲解

引用: https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

redis 特点

  1. 所有数据存储在内存中,高速读写
  2. 提供丰富多样的数据类型:string、 hash、 set、 sorted set、bitmap、hyperloglog
  3. 提供了 AOF 和 RDB 两种数据的持久化保存方式,保证了 Redis 重启后数据不丢失
  4. Redis 的所有操作都是原子性的,还支持对几个操作合并后的原子性操作,支持事务

string 类型是 Redis 中最基本的数据类型,最常用的数据类型,甚至被很多玩家当成 redis 唯一的数据类型去使用。string 类型在 redis 中是二进制安全 (binary safe) 的, 这意味着 string 值关心二进制的字符串,不关心具体格式,你可以用它存储 json 格式或 JPEG 图片格式的字符串

Redis_Hash讲解

引用: https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

1
2
3
4
5
6
7
8
9
10
11
12
13
//同时设置多个字段值
hmset user:2 name beijing email struggle@126.com
//得到所有的值
HGETALL runoobkey
//删除key中的字段
HDEL key field
//为哈希表 key 中的指定字段的整数值加上增量 increment 。
HINCRBY key field increment

HMGET key field1 [field2]
获取所有给定字段的值
HMSET key field1 value1 [field2 value2 ]
同时将多个 field-value (域-值)对设置到哈希表 key 中。
Redis_List讲解

引用自:https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

list 是按照插入顺序排序的字符串链表,可以在头部和尾部插入新的元素(双向链表实现,两端添加元素的时间复杂度为 O(1))。插入元素时,如果 key 不存在,redis 会为该 key 创建一个新的链表,如果链表中所有的元素都被移除,该 key 也会从 redis 中移除。

常见操作时用 lpush 命令在 list 头部插入元素, 用 rpop 命令在 list 尾取出数据。
blpush;lrpop; 分别都是阻塞版本,可以设置超时时间.
如果有多个客户端同时因为某个列表而被阻塞,那么当有新值被推入到这个列表时,服务器就会按照先到先服务原则,优先向最早被阻塞的客户端返回新值。

Redis_Set讲解

引用自:https://mp.weixin.qq.com/s/65jTyTK7Pj5Yc4ddPZBHEg

set 数据类型是一个集合(没有排序,不重复),可以对 set 类型的数据进行添加、删除、判断是否存在等操作(时间复杂度是 O(1) )

set 集合不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份。

set 类型提供了多个 set 之间的聚合运算,如求交集、并集、补集,这些操作在 redis 内部完成,效率很高。
共同好友;共同文章