倒序排序_检索的排序分组

SQL检索输出的时候,如果我想按照一定顺序输出怎么实现呢?还是拿上期的数据做栗子,假设根据stock_code做排序,可以通过下面的2句实现:

select * from stock_base order by stock_code;select * from stock_base order by stock_code asc;

522a992b632989b1fedb9c5bd8e44041.png

如果想倒序的话,则应该用

select * from stock_base order by stock_code desc;

724b747c76b5c87c6a41d3482049998a.png

SQL检索的排序是通过order by + 字段名实现的,后面有两个关键字:asc、desc。asc是正序排序,这个关键字可以忽略不写。

order by后面可以加多个字段,每个字段后面指定是正序排序还是倒序排序。比如:

select * from stock_base order by stock_code asc, stock_name desc;

这里是先根据stock_code做正序排序,排完序后再根据stock_name做倒序排序。

再来说下分组吧,分组涉及2个新的关键字:group by, having。先来看下group by吧,这里我想统计一下sz开通的有多少,sh开头的多少,SQL怎么实现呢:

select substr(stock_code, 1, 2) diff, count(1) count from stock_base group by substr(stock_code, 1, 2);

分析一下这句SQL吧,这里用到了substr()函数来切割stock_code,从第一个开始,取2个字符,然后根据这2个字符进行分组,分别计算有多少数量,字段后面的diff、count都是前面那个运算后结果列的别名。运行结果如下:

7a1e0b73894c809093615066aaad549e.png

说到过滤,SQL里其实是分为2种的,一种是where条件语句,一种是having条件语句。有什么区别呢?简单点说吧,where语句是用在分组前的,having语句是用在分组后的。上面这个结果,如果我要看除了sh以外的件数,这里用到了不等于符号,语句是这样的:

select substr(stock_code, 1, 2) diff, count(1) count from stock_base group by substr(stock_code, 1, 2) having diff != 'sh';

我觉得where和having是有很多共同点的,关键还是看怎么去使用。基础的SQL检索语句的语法这里已经捋了一下,后续要是想到再补吧。下期介绍MySQL的几个常用函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值