sql

select t.品牌,sum(a)

from (select distinct day(dt_t3) a , t3.用户浏览ID, t2.品牌
from  t3
left join t1
on t3. 商品编码t3 = t1. 商品编码t1  left join t2 on t1. 商品编码t1 = t2. 商品编码t2
where year(dt_t3) = '2019'
) t 
group by t.品牌;







select distinct day(dt_t3) , t3.用户浏览ID,t1.品牌
from  t3
left join t1
on t3. 商品编码t3 = t1. 商品编码t1
where year(dt_t3);



select* from student;
select * from record_time;
select * from sc;

create table  record_time(
sno varchar(10) ,
record_time date);

insert into record_time values ('9512101','2019/1/5');
insert into record_time values ('9512102','2019/6/5');
insert into record_time values ('9512103','2019/1/5');
insert into record_time values ('9512104','2019/10/5');


# 查询近六个月没有违纪的学生
create table b as
select * , sum(grade) 总分
from student left join sc on student.sno1 = sc.sno
where sno1 not in (
select sno from record_time where  record_time BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW())
group by sno1;

select * from b;


# 查询六个月中没有违纪且总分排名在各年级前十的
select sno1,sname,ssex,sdept,总分,rank
from(
select b.*,if(@p = b.sdept,@r := @r+1,@r := 1) rank,@p := b.sdept
from 
b,(select @p :=null,@r := 0) r
order by b.sdept,b.总分 desc) m
where rank<=3
; 







select sno1,sname,ssex,sdept,总分,rank
from(
	select b.*,if(@p = b.sdept,@r := @r+1,@r := 1) rank,@p := b.sdept
from 
	(select * , sum(grade) 总分
		from student left join sc on student.sno1 = sc.sno
			where sno1 not in (
					select sno from record_time where  record_time BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW())
					group by sno1) b,(select @p :=null,@r := 0) r
					order by b.sdept,b.总分 desc) m
where rank<=3
; 




select m.stu_id,class,总分,rank
from(
	select b.*,if(@p = b.class,@r := @r+1,@r := 1) rank,@p := b.class
from 
	(select * , sum(score) 总分
		from stu_table m left join score_table s on m.stu_id = s.stu_id
			where m.stu_id not in (
					select stu_id from record_time where  record_time BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW())
					group by m.stu_id) b,(select @p :=null,@r := 0) r
					order by b.calss,b.总分 desc) m
where rank<=10
; 




select class , score,rank
from 
(
select a.*,if(@p = a.class,@r:=@r+1,@r:=1) rank,@p :=a.class
from student22 a ,(select @p:=null,@r:=0) r
order by a.class asc,a.score desc) z
where rank<=3;





create table student22(
	id varchar(20),-- 编号
	class varchar(20),-- 年级
	score int-- 分数
);



insert student22 values('1','一年级',82);
insert student22 values('2','一年级',95);
insert student22 values('3','一年级',82);
insert student22 values('4','一年级',40);
insert student22 values('5','一年级',20);
insert student22 values('6','二年级',95);
insert student22 values('7','二年级',40);
insert student22 values('8','二年级',3);
insert student22 values('9','二年级',60);
insert student22 values('10','二年级',10);
insert student22 values('11','三年级',70);
insert student22 values('12','三年级',60);
insert student22 values('13','三年级',40);
insert student22 values('14','三年级',90);
insert student22 values('15','三年级',20);


select a.class,a.score from student22 a where (select count(*) from student22 where a.class=class and a.score<score)<4
order by a.class, a.score desc;







# 制造伪列来进行数据的排名

SELECT (@r :=@r + 1) AS rank
FROM  (SELECT @r := 0) r 
 ;





# 数据的输入

CREATE TEMPORARY TABLE tm_test (num int , createdat datetime  );
INSERT INTO tm_test (num, createdat)  VALUES (1, '2018/12/28 21:41:20');
INSERT INTO tm_test (num, createdat)  VALUES (1, '2018/12/28 21:42:20');
INSERT INTO tm_test (num, createdat)  VALUES (1, '2018/12/28 21:42:20');
INSERT INTO tm_test (num, createdat)  VALUES (1, '2018/12/28 21:43:20');
INSERT INTO tm_test (num, createdat)  VALUES (1, '2018/12/28 21:44:20');
INSERT INTO tm_test (num, createdat)  VALUES (2, '2018/12/29 21:41:20');
INSERT INTO tm_test (num, createdat)  VALUES (2, '2018/12/29 21:42:20');
INSERT INTO tm_test (num, createdat)  VALUES (2, '2018/12/29 21:42:20');
INSERT INTO tm_test (num, createdat)  VALUES (2, '2018/12/29 21:43:20');
INSERT INTO tm_test (num, createdat)  VALUES (2, '2018/12/29 21:44:20');
INSERT INTO tm_test (num, createdat)  VALUES (3, '2018/12/30 21:41:20');
INSERT INTO tm_test (num, createdat)  VALUES (3, '2018/12/30 21:42:20');
INSERT INTO tm_test (num, createdat)  VALUES (3, '2018/12/30 21:42:20');
INSERT INTO tm_test (num, createdat)  VALUES (3, '2018/12/30 21:43:20');
INSERT INTO tm_test (num, createdat)  VALUES (3, '2018/12/30 21:44:20');
  SELECT * FROM tm_test;
  

# 根据某一列进行排名
 SELECT a.*,(@r :=@r + 1) AS rank
FROM tm_test a,(SELECT @r := 0) r 
ORDER BY createdat;

SELECT num,createdat,rank
  FROM
  (
 SELECT  a.*,IF(@p=a.num,@r:=@r+1,@r:=1) AS rank, @p:= a.num
  FROM tm_test a,(SELECT @p:=NULL,@r:=0)r
  ORDER BY a.num,a.createdat  
  )z 
  where rank<=3;


select * from student22;


select a.*,(select @m := @m +1) rank
from student22 a,(select @m := 0) m
order by score;

select class , score,rank
from 
(
select a.*,if(@p = a.class,@r:=@r+1,@r:=1) rank,@p :=a.class
from student22 a ,(select @p:=null,@r:=0) r
order by a.class asc,a.score desc) z
where rank<=3;






create table TEST_ROW_NUMBER_OVER(
       id varchar(10) not null,
       name varchar(10) null,
       age varchar(10) null,
       salary int null
);
select * from TEST_ROW_NUMBER_OVER t;
 
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,'a',10,8000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,'a2',11,6500);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(2,'b',12,13000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(2,'b2',13,4500);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(3,'c',14,3000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(3,'c2',15,20000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(4,'d',16,30000);
insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(5,'d2',17,1800);


# 对查询结果进行排序(无分组)
select b.*,(select @r :=@r +1) rank
from TEST_ROW_NUMBER_OVER b,(select @r := 0 ) r
order by salary desc;

# 根据id分组排序
select id,name,age,salary,rank
from (
select b.* , if(@p = id,@r := @r+1,@r :=1) rank ,@p:=b.id
from TEST_ROW_NUMBER_OVER b,(select @r := 0,@p:=null) r
order by id,salary) z;
 
# 找出每一组中序号为一的数据
select id,name ,age ,salary,rank
from(
select b.*,if(@p=id,@r:=@r+1,@r:=1) rank,@p:=id
from TEST_ROW_NUMBER_OVER b,(select @p := null,@r := 0) r
order by id,salary) z
where rank <= 1;


# 排序找出年龄在13岁到16岁数据,按salary排序

select *
from TEST_ROW_NUMBER_OVER b
where age between 13 and 16
order by salary desc;


SELECT * FROM user_event WHERE DATE_FORMAT(create_time,'%Y-%m') = DATE_FORMAT(NOW(),'%Y-%m');

select date_format(now(),'%Y-%m ');

  

posted @ 2019-10-17 21:41  九友  阅读(164)  评论(0编辑  收藏  举报