1.关于mysql实现排名
mysql不能用rank()函数,比如:
SELECT discrib,rank() FROM report2 t order by discrib
执行报错,无法直接用rank()函数
但可以用rank()函数和开窗函数over()结合使用,可以成功查询:
SELECT t.* ,rank()over( order by number) FROM report2 t
另外可以用自定义变量方法实现rank()排名
需要注意的是,自定义变量的衍生表,都必须有自己的别名,否则会报错
SELECT t.*,@i:=@i+1 FROM report2 t,(select @i:=1) order by t.number
报错:Every derived table must have its own alias(每一个衍生表必须有自己的别名)
正确示范:
SELECT t.*,@i:=@i+1 FROM report2 t,(select @i:=1) s order by t.number
所谓衍生表,包含自定义变量组成的表,SQL查询组成的新表;如:
select * from report2,(select number from report2)
报错,后面(select number from report2)衍生表需要名别名。
2.分组查询的几个用法
group_concat(字段) concat用逗号拼接group中的所有该字段值
group by + having count()/avg()...
group by + with rollup 作用:在最后新增一行,来记录当前列里所有记录的总和,如下: