Mysql 伪列及其应用

  伪列,顾名思义就是假的意思假列,不是真实存在的字段,有时候我们会对查询结果进行排序或者进行编号这时候我们就可以用到伪列了。mysql中定义伪列有两种方式,一种是将伪列的定义和使用分开,还有一种是使用和定义都放在一起两者通过全连联系起来,后者更加方便使用。

用到的表 crm_user_yhq_result_copy1

/*
 Navicat Premium Data Transfer

 Source Server         : 本地
 Source Server Type    : MySQL
 Source Server Version : 50726
 Source Host           : localhost:3306
 Source Schema         : framework

 Target Server Type    : MySQL
 Target Server Version : 50726
 File Encoding         : 65001

 Date: 09/05/2019 23:51:37
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for crm_user_yhq_result_copy1
-- ----------------------------
DROP TABLE IF EXISTS `crm_user_yhq_result_copy1`;
CREATE TABLE `crm_user_yhq_result_copy1` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `uid` varchar(255) DEFAULT NULL,
  `hard` int(10) DEFAULT NULL COMMENT '所有的难度值',
  `createTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `score` int(10) DEFAULT NULL COMMENT '得分',
  `endTime` varchar(255) NOT NULL COMMENT '答题结束时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=913 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

-- ----------------------------
-- Records of crm_user_yhq_result_copy1
-- ----------------------------
BEGIN;
INSERT INTO `crm_user_yhq_result_copy1` VALUES (647, '9ddf45ff-31ef-4779-9991-0542e77ef259', 21, '2019-05-05 15:28:44', 180, '2019-05-05 15:30:42');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (665, '9ddf45ff-31ef-4779-9991-0542e77ef259', 23, '2019-05-05 17:04:21', 190, '2019-05-05 17:05:25');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (682, '492ea3de-5147-4d15-9582-93361d6fb8e4', 23, '2019-05-05 17:46:55', 190, '2019-05-05 17:47:55');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (830, 'e53fae5b-f6e4-4327-8817-765fc15a4b38', 22, '2019-05-07 17:37:18', 170, '2019-05-07 17:40:27');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (862, '3a351f04-50da-4e6e-9417-b62b55ef0dcb', 20, '2019-05-08 12:12:19', 200, '2019-05-08 12:15:48');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (863, 'd672c51e-f11b-4485-b8b6-308d8e31414c', 23, '2019-05-08 12:14:01', 180, '2019-05-08 12:15:54');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (865, '3a351f04-50da-4e6e-9417-b62b55ef0dcb', 22, '2019-05-08 12:23:01', 200, '2019-05-08 12:25:44');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (868, '3a351f04-50da-4e6e-9417-b62b55ef0dcb', 22, '2019-05-08 12:28:44', 190, '2019-05-08 12:32:02');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (878, '9ddf45ff-31ef-4779-9991-0542e77ef259', 22, '2019-05-08 14:13:57', 200, '2019-05-08 14:16:54');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (880, '3a351f04-50da-4e6e-9417-b62b55ef0dcb', 22, '2019-05-08 14:20:07', 200, '2019-05-08 14:23:10');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (881, '16e7a06f-2168-45c4-ab66-83d9fa06c7c8', 59, '2019-05-08 14:21:47', 170, '2019-05-08 14:22:02');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (883, '9ddf45ff-31ef-4779-9991-0542e77ef259', 21, '2019-05-08 14:25:12', 190, '2019-05-08 14:27:41');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (907, '9ddf45ff-31ef-4779-9991-0542e77ef259', 22, '2019-05-08 15:28:00', 180, '2019-05-08 15:28:57');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (909, '9ddf45ff-31ef-4779-9991-0542e77ef259', 22, '2019-05-08 17:57:20', 200, '2019-05-08 17:58:03');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (911, '9ddf45ff-31ef-4779-9991-0542e77ef259', 22, '2019-05-08 18:28:10', 190, '2019-05-08 18:29:01');
INSERT INTO `crm_user_yhq_result_copy1` VALUES (912, '9ddf45ff-31ef-4779-9991-0542e77ef259', 22, '2019-05-08 18:31:24', 200, '2019-05-08 18:34:35');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;
crm_user_yhq_result_copy1

需求:根据score从高到低排序,并给出排名

1、使用方法一:

set @rownum=0;   #定义变量
SELECT @rownum:=@rownum+1 as rank,crm_user_yhq_result_copy1.* from crm_user_yhq_result_copy1 ORDER BY score DESC;  #@rownum:=@rownum+1 表示变量rownum加一并重新赋值给rownum

查询集如下:

Mysql 伪列及其应用_第1张图片

2、使用方法二:

SELECT @rownum:=@rownum+1 as rank,crm_user_yhq_result_copy1.* from crm_user_yhq_result_copy1,(SELECT @rownum:=0) as temp ORDER BY crm_user_yhq_result_copy1.score desc

Mysql 伪列及其应用_第2张图片

两者的查询集一致,很显然方法二比方法一更好用写,一句sql搞定不需要另外定义变量。

 

转载于:https://www.cnblogs.com/just-do/p/10841974.html

你可能感兴趣的:(Mysql 伪列及其应用)