今天同事给了一个小需求,从一个存有不定数量坐标数据的表(map_trace)中每隔20条取一条.最后写了下面这条SQL: select * from (select @n:=@n+1 as n, a.* from (select * from map_trace order by CREATE_time desc)a,(select @n:=0)b)c where c.n%20<2 and c.n%20!=0; 在此复习下相关知识: 生成一个字段(非表中字段)用以记录排序 (类比为oracle数
分页查询中,需要用到伪列rownum,代码如下: select * from (select rownum rn, name from cost where rownum <= 6) where rn >3; 可是第一次用rownum,第二次用rn,位置不能变,否则出错,第一次的rownum是oracle中的一个虚拟列,rn是给这个rownum起的别名,也就是在子查询中的别名要在外查询中调用.需要注意一下,就是rownum是取出一个再编号, 所以在里面我们可以写<或者<=,而不能写
在介绍mysql的多版本并发控制mvcc的过程中,我们提到过mysql中存在一些隐藏列,例如行标识.事务ID.回滚指针等,不知道大家是否和我一样好奇过,要怎样才能实际地看到这些隐藏列的值呢? 本文我们就来重点讨论一下诸多隐藏列中的行标识DB_ROW_ID,实际上,将行标识称为隐藏列并不准确,因为它并不是一个真实存在的列,DB_ROW_ID实际上是一个非空唯一列的别名.在拨开它的神秘面纱之前,我们看一下官方文档的说明: If a table has a PRIMARY KEY or UNIQUE
如果想在一个已经建好的表中添加一列,可以使用诸如: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(255) not null; 这条语句会向已有的表中加入新的一列,这一列在表的最后一列位置.如果我们希望添加在指定的一列,可以用: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(255) not null after COLUMN_NAME; 注意,上面这个命令
如果想在一个已经建好的表中添加一列,可以用诸如: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null; 这条语句会向已有的表中加入新的一列,这一列在表的最后一列位置.如果我们希望添加在指定的一列,可以用: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null after COLUMN_NAME; 注意,上面这个命令的意思
最近搞报表的项目,要写数据库sql语句,根据状态值查询状态的个数,这个开始难为到我了,不过已经有解决办法了. 在数据库表中有一个字段是状态(zt),这里面有1-7这7个状态,现在查询每个状态的数量,并且显示在一张表中,正常情况下查状态是: SELECT COUNT(*) draft FROM `it_project_info` WHERE `it_project_info`.item_status`='1'; SELECT COUNT(*) checks FROM `it_project_in
MySql中增加一列 如果想在一个已经建好的表中添加一列,可以用: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(45) not null; 这条语句向已有的表中加入新的一列,这一列在表的最后一列位置.如果希望添加在指定的一列,可以用: alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(45) not null after COLUMN_NAME; 上面这个命令
1.给表添加列 ALTER TABLE supplier_seller ADD COLUMN company_id INT NULL COMMENT '供应主体id'; 默认情况下,添加的列会添加到最后一列. 如果要求添加到指定位置,语句如下: ALTER TABLE supplier_seller ADD COLUMN company_id INT NULL COMMENT '供应主体id' AFTER mdm_info_json; 如果想要添加到第一列,语句如下: ALTER TABLE s
oracle中的伪列默认第一行是1,所以可以选择<=rownum的方法选取,但是>是无法选取的.这时候需要固化伪列. 固化前可以这样查询:select * from 表名 where rownum<5. 要查询>5的话,需要这样固化: select * from (select rownu r,empno from emp) where r>5