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

查詢集如下:

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

兩者的查詢集一致,很顯然方法二比方法一更好用寫,一句sql搞定不需要另外定義變量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM