mysql group语句可以排序_MySQL中group_concat()函数的排序方法

示例一

group_concat()函数的参数是可以直接使用order by排序,下面通过例子来说明,首先看下面的t1表。

e1da3d93414b2c2772b52e6da8819918.png

比如,我们要查看每个人的多个分数,将该人对应的多个分数显示在一起,分数要从高到底排序。可以这样写:SELECT username,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM t1 GROUP BY username;

效果如下:

6c17e71b0edd0d061c537e9f2b254057.png

示例二SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

-- Table structure for demo

-- ----------------------------

DROP TABLE IF EXISTS `demo`;

CREATE TABLE `demo`  (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`name` char(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,

`score` bigint(20) DEFAULT NULL,

PRIMARY KEY (`id`) USING BTREE

) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------

-- Records of demo

-- ----------------------------

INSERT INTO `demo` VALUES (1, '张三14', 60);

INSERT INTO `demo` VALUES (2, '张三14', 54);

INSERT INTO `demo` VALUES (15, '张三14', 61);

INSERT INTO `demo` VALUES (16, '张三15', 12);

INSERT INTO `demo` VALUES (17, '张三16', 54);

INSERT INTO `demo` VALUES (18, '张三17', 33);

INSERT INTO `demo` VALUES (41, '张三', 54);

INSERT INTO `demo` VALUES (42, '张三', 89);

INSERT INTO `demo` VALUES (43, '张三', 48);

INSERT INTO `demo` VALUES (44, '张三', 98);

SET FOREIGN_KEY_CHECKS = 1;

e5a406b1d6375d6196bb81c39404acef.png

mysql 中 group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。

我们想根据name分组,然后根据score倒序排序,下面展示两种写法;

sql一:错误排序语句:SELECT name,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM demo GROUP BY name

98504933bf9d7248e2fabcda8e3012aa.png

这种是错误的下面的不是根据GROUP_CONCAT拼接的数据是不会排序的

sql二:正确排序语句:SELECT name,GROUP_CONCAT(score ORDER BY score DESC) AS myScore FROM demo GROUP BY name order by myScore desc;

8d68a8b3bd6fff2e78568eabf1bdf214.png

必须根据排序后的字段二次排序,第一次只能是排序GROUP_CONCAT里边的如果没有分组的是无法排序的,只能分完组后再根据myScore排序

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值