闲来无事,逛逛V2EX发现一道MySQL数据库题目,原题如下:

  遂打开很长一段时间都没用过SQLyog,噗呲噗呲的干起活来……

  建测试表:

CREATE TABLE test_001
(
id INT,
type2 VARCHAR(10),
bizId VARCHAR(10),
batchId INT
) INSERT INTO test_001(id,type2,bizId,batchId) VALUES(1,1,'uid1',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(2,1,'uid2',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(3,2,'fid1',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(4,2,'fid2',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(5,1,'uid3',2);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(6,2,'fid3',3); SELECT * FROM test_001;

  第一次解决,KO!

SELECT batchId,
GROUP_CONCAT(uid) AS uid,
GROUP_CONCAT(typeid) AS typeid
FROM
(SELECT batchId,
CASE WHEN type2 = '' THEN bizId
ELSE NULL END AS uid,
CASE WHEN type2 = '' THEN bizId
ELSE NULL END AS typeid
FROM test_001) g
GROUP BY batchId;

  看起来没什么毛病,哈哈哈!继续看看其他高手有没有什么值得学习的解决方案。

SELECT * FROM test_001;
SELECT batchId,
GROUP_CONCAT(CASE WHEN type2 = 1 THEN bizId ELSE NULL END) AS "uid",
GROUP_CONCAT(CASE WHEN type2 = 2 THEN bizId ELSE NULL END) AS "typeid"
FROM test_001
GROUP BY batchId;

  不采用子查询显得更加的优雅,get!结果符合要求!

  附原文链接:https://www.v2ex.com/t/535679


  顺手温习一下concat、concat_ws、group_concat函数的使用方法。

  •   concat(str1,str2,str3,...) 字符串拼接

  如果有任何一个参数为null,则返回值为null。

  •   concat_ws(separator,str1,str2,...)

  指定分隔符拼接,分隔符不能为null。

  •   group_concat( ) 分组拼接

  group_concat([distinct] col [order by xxx desc] [separator '分隔符'])

SELECT * FROM test_001

-- 例子1
SELECT batchId,
GROUP_CONCAT(bizId ORDER BY bizId DESC SEPARATOR '_') AS xxx
FROM test_001
GROUP BY batchId -- 例子2
SELECT batchId,
GROUP_CONCAT(CONCAT_WS('-',type2,bizId) ORDER BY bizId)
FROM test_001
GROUP BY batchId

END 2019-03-26 15:27:36

MySQL学习笔记:一道group by+group_concat解决的小问题的更多相关文章

  1. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  2. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

  3. 一千行MySQL学习笔记 (转)

    出处:  一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...

  4. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  5. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  6. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

  7. MySQL学习笔记-cache 与 buffer

    Cache和Buffer是两个不同的概念,简单的说,Cache是加速"读",而 buffer是缓冲"写",前者解决读的问题,保存从磁盘上读出的数据,后者是解决写 ...

  8. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  9. MySql学习笔记(一)之DQL常用查询

    MySql学习笔记(一)之DQL常用查询 前言:mysql是中小型的数据库软件,SQL语言分为DDL,DCL,DML,DQL四种,在这里重点讲解DQL的单表查询. 正文:在学习mysql单表查询之前, ...

随机推荐

  1. CodeForces - 163B Lemmings

    B. Lemmings time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  2. 浅谈分词算法(3)基于字的分词方法(HMM)

    目录 前言 目录 隐马尔可夫模型(Hidden Markov Model,HMM) HMM分词 两个假设 Viterbi算法 代码实现 实现效果 完整代码 参考文献 前言 在浅谈分词算法(1)分词中的 ...

  3. python学习笔记8-邮件模块

    我们在开发程序的时候,有时候需要开发一些自动化的任务,执行完之后,将结果自动的发送一份邮件,python发送邮件使用smtplib模块,是一个标准包,直接import导入使用即可,代码如下: impo ...

  4. luogu P2662 牛场围栏

    传送门 因为一个木板可以切掉最多\(m\),所以可以先预处理哪些长度的木板可用,开个桶,然后对\([l-m,l]\)打标记,再把打了标记的数取出来 假设可用长度\(a_1,a_2,,,a_n\)从小到 ...

  5. PWA,SPA,MPA

    PWA渐进式应用 特点: 不会部署到应用商店. 离线应用,通过设备进行存储规划 在发布了pwa的网站,浏览器会询问是否安装app到主屏. 方便分享,通过url. 可推送通知 . 通过service w ...

  6. Django学习手册 - cookie / session

    cookie """ cookie属性: obj.set_cookie(key,value,....) obj.set_signed_cookie(key,value,s ...

  7. Java并发编程(1)-Java内存模型

    本文主要是学习Java内存模型的笔记以及加上自己的一些案例分享,如有错误之处请指出. 一 Java内存模型的基础 1.并发编程模型的两个问题 在并发编程中,需要了解并会处理这两个关键问题: 1.1.线 ...

  8. SpringBoot使用thymeleaf模板引擎

    (1).添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  9. GHOST分区丢失只剩C盘

    很多人装系统时会经常会使用GHOST来恢复自己的系统,当WINDOWS系统出现意外时,再用GHOST的“From Image to 分区”来对系统进行恢复,这样就可以省去繁琐耗时的重新安装操作系统的工 ...

  10. 汇编语言转换成c语言,或者汇编语言转换成golang的汇编,c语言转换成golang的方法

    https://github.com/minio/c2goasm http://microapl.com/asm2c/index.html               收费的 https://gith ...