mysql oder by排序把null的字段放在最后面

默认情况下,MySQL将null算作最小值。

使用:
if(isnull(字段名),1,0) 
说明:它的意思是将该字段根据是否为null值分成两部分,0相当于null值部分放在最后面,1相当于非null值部分放在前面,在排序的时候,先根据这一属性进行升序排列

select
		city_code, ins_code, organ_type, organ_name, organ_address,
		organ_access_url,
		state, longitude, latitude,
		area, organ_category, adCode, organ_catagery
		, ROUND(
		6371.393 * 2 * ASIN(
		SQRT(
		POW(
		SIN(
		(
		#{latitude,jdbcType=DOUBLE}
		* PI() / 180 - latitude * PI() / 180
		) / 2
		),
		2
		) +
		COS(#{latitude,jdbcType=DOUBLE} * PI() / 180) * COS(latitude * PI()
		/
		180) * POW(
		SIN(
		(
		#{longitude,jdbcType=DOUBLE} * PI() / 180 - longitude
		* PI() / 180
		) / 2
		),
		2
		)
		)
		) * 1000 * #{val}
		)/1000 AS dis
		FROM
		wh_institution
		where city_code = #{cityCode,jdbcType=VARCHAR} and ins_code = #{insCode,jdbcType=VARCHAR}  and organ_type =
		#{organType,jdbcType=VARCHAR} and state = ‘1‘
		ORDER BY
		if(isnull(dis),1,0),
		dis,
		CONVERT(organ_name USING gbk)
		COLLATE
		gbk_chinese_ci ASC
		LIMIT
		#{startRow},#{endRow}

  

原文地址:https://www.cnblogs.com/zyf-yxm/p/12155626.html

时间: 2024-10-08 15:25:37

mysql oder by排序把null的字段放在最后面的相关文章

MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题

Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字段ishaspic:新添字段时,报错 [SQL] alter table WorkTask add ishaspic int(10) Null;[Err] 1034 - Incorrect key file for table 'WorkTask'; try to repair it 解决方案:新建

mysql 5.5与5.6 timestamp 字段 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的区别

http://www.111cn.net/database/mysql/55392.htm 本文章来给各位同学介绍关于mysql 5.5与5.6 timestamp 字段 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的区别,希望此教程对各位有帮助. mysql5.6数据库:  代码如下 复制代码 [BIGHD]([email protected]) [cm]> SELECT version(); +------------+ | ve

MySQL 创建表时,设置时间字段自己主动插入当前时间

MySQL 创建表时,设置时间字段自己主动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) NOT NULL, `CURRENT_TIME` timestamp not null default current_timestamp, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Oracle 实现 mysql 的 find_in_set 排序!

oracle 实现类似MYSQL的 find_in_set 排序,函数 decode: select * from tb_info_game where gameid in(23,20,19,26,18) order by decode(gameid,23,1,20,2,18,3,26,4,1009,5) by default7#zbphp.com 参考CDSN的帖子:http://topic.csdn.net/t/20060124/08/4532718.html 提问: -----------

MySQL中的表中增加删除字段

1增加两个字段: [sql] view plaincopy mysql> create table id_name(id int,name varchar(20)); Query OK, 0 rows affected (0.13 sec) mysql> alter table id_name add age int,add address varchar(11); Query OK, 0 rows affected (0.13 sec) Records: 0  Duplicates: 0  

mysql实现分组排序

群里有童鞋问,想要根据用户分组,以该用户的下单时间为降序,提取所有用户的第二个订单信息. 这属于分组排序,在Oracle有内置函数可以实现,而在mysql,做起来比较蛋疼. 我提供一种方法供参考 CREATE TABLE user_orders (orders_id INT UNSIGNED NOT NULL, user_id INT UNSIGNED NOT NULL, add_time INT UNSIGNED NOT NULL, PRIMARY KEY(orders_id), KEY(us

MySQL 创建表时,设置时间字段自动插入当前时间

MySQL 创建表时,设置时间字段自动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) NOT NULL, `CURRENT_TIME` timestamp not null default current_timestamp, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Mysql 内部默认排序

mysql默认的排序: https://forums.mysql.com/read.php?21,239471,239688#msg-239688 Do not depend on order when ORDER BY is missing. Always specify ORDER BY if you want a particular order -- in some situations the engine can eliminate the ORDER BY because of h

MySQL高级分组排序

想要根据用户分组,以该用户的下单时间为降序,提取所有用户的第二个订单信息.这属于分组排序,在Oracle有内置函数可以实现,而在mysql就有点麻烦: CREATE TABLE user_orders (orders_id INT UNSIGNED NOT NULL, user_id INT UNSIGNED NOT NULL, add_time INT UNSIGNED NOT NULL, PRIMARY KEY(orders_id), KEY(user_id), KEY(add_time)