精华内容
下载资源
问答
  • Mysql GROUP BY 字段拼接

    千次阅读 2020-07-21 18:17:56
    select *,group_concat(file_name) from activity_scheme_files GROUP BY activity_scheme_id
    select *,group_concat(file_name) from activity_scheme_files  GROUP BY activity_scheme_id
    

    在这里插入图片描述

    展开全文
  • -- 2.count(字段)不计算null值 -- 3.count(null)结果恒为0 -- 查询code字段(20010001.20010002.20010003)的第二部分(20010002)eg: -- 20010001 :20010001 -- 20010001.20010002 :20010...
    -- 注:MySQL数据库
    -- 1.count(1)与count(*)得到的结果一致,包含null值。
    -- 2.count(字段)不计算null值
    -- 3.count(null)结果恒为0
    
    -- 查询code字段(20010001.20010002.20010003)的第二部分(20010002)eg: 
    -- 20010001 :20010001
    -- 20010001.20010002 :20010002
    -- 20010001.20010002.20010003 :20010002
    -- 20010001.20010002.20010003.20010004 :20010002
    -- SUBSTRING_INDEX(SUBSTRING_INDEX(code,".",2), '.', -1):先左边数前两个,再右边数第一个
    SELECT code, SUBSTRING_INDEX(SUBSTRING_INDEX(code,".",2), '.', -1) FROM sys_area
    
    -- 查询最大时间的数据(多条取时间最大的那条,一条直接取)fun1
    SELECT * FROM table a WHERE a.ba_time IN (SELECT MAX(b.ba_time) FROM table b WHERE b.id=a.id)
    -- 查询最大时间的数据fun2
    SELECT * FROM table a WHERE NOT EXISTS(SELECT 1 FROM table WHERE id=a.id AND ba_time>a.ba_time)
    -- 查询每个学生最大分数的数据fun3(同一个student有相同的grades的话会查出多条需要group by fk_id)
    SELECT a.* FROM t_grades a 
    INNER JOIN (
    	SELECT student_id, MAX(grades) grades FROM t_grades 
    	GROUP BY student_id
    ) AS t ON t.student_id = a.student_id AND a.grades = t.grades 
    group by student_id 
    
    -- 同一条数据不同字段判断筛选,这里是时间大于30天比较(左连接条件也可以放到where/having中)
    SELECT count(DISTINCT a.company_id) declareCount 
    FROM check a 
    INNER JOIN company b ON b.check_id = a.id AND DATE_ADD(c.ba_time, INTERVAL +30 DAY) < a.reportprovide_time AND a.type = 3
    WHERE TRUE
    
    SELECT a.*, B.id, B.business_id, COUNT(d.id) FROM c_dosemonitor a
    LEFT JOIN tp_project b ON b.business_id = a.ID
    LEFT JOIN c_dosemonitor_patch c ON c.dosemonitor_id = a.id AND c.is_valid = 1 -- 在连接时, 左边的一定会查出来
    LEFT JOIN c_dosemonitor_data d ON d.patch_id = c.id AND d.is_valid = 1
    WHERE a.is_valid = 1 AND b.is_valid = 1  -- 表示在连接完的结果中筛选, 会将查询结果中的一整条删除掉, 包括左边的tp_project
    AND b.type = 1
    GROUP BY a.id
    
    -- 不同条件的统计(在select中使用if)
    SELECT a.*, e.name companyName, b.entrustment_year entrustmentYear, 
    CONCAT(COUNT(DISTINCT IF(c.status = 4, TRUE, NULL), '/4')) PROCESS, 
    COUNT(DISTINCT d.id) abnormalCount 
    FROM tp_project a
    LEFT JOIN c_dosemonitor b ON b.ID = a.business_id AND b.is_valid = 1
    LEFT JOIN c_dosemonitor_patch c ON c.dosemonitor_id = b.id AND c.is_valid = 1 
    LEFT JOIN c_dosemonitor_data d ON d.patch_id=c.id AND d.is_valid=1 AND d.is_abnormal = 1 
    LEFT JOIN tp_company e ON e.id = a.cid
    
    -- 分组并得到每组某个字段的拼接(这里得到的是每组去重name字段的拼接,逗号分开, 和每组的数量)
    SELECT group_id, GROUP_CONCAT(DISTINCT NAME SEPARATOR ',') NAMES,COUNT(id) nameCount
    FROM check_record
    GROUP BY group_id;
    
    -- 根据查询结果的某个列值判断,从而取查询结果中的某列
    SELECT a.*, 
    CASE a.device_type
    	WHEN 1 THEN d.area_id
    	WHEN 4 THEN e.area_id
    END areaName, -- 从d或e表的area_id中确定areaName值
    CASE a.device_type
    	WHEN 1 THEN CONCAT('ray', d.id)
    	WHEN 4 THEN CONCAT('source', e.id)
    	ELSE CONCAT('', '')
    END restDeviceId,
    CASE a.device_type WHEN 1 THEN d.device_name ELSE e.device_name END deviceName,
    CASE a.device_type WHEN 1 THEN d.unit_type ELSE e.type END unitType,
    CASE a.device_type WHEN 1 THEN d.code ELSE e.code END CODE
    from D_LiveCheckDetail a
    LEFT JOIN D_check_patch b ON b.id = a.patch_id
    LEFT JOIN D_LiveCheck c ON c.id = b.check_id
    		
    LEFT JOIN e_ray_device d ON d.id = a.device_id
    LEFT JOIN e_source_device e ON e.id = a.device_id	
    		
    where c.is_valid = 1 AND b.is_valid= 1 AND a.is_valid = 1
    <if test="checkId != null">
    	AND c.id = #{checkId,jdbcType=INTEGER}
    </if>
    <if test="patchId != null">
    	AND b.id = #{patchId,jdbcType=INTEGER}
    </if>
    <if test="type != null">
    	AND a.device_type = #{type,jdbcType=INTEGER}
    </if>
    
    -- 3. 不同条件统计数量(这里统计每个省指定年份的不同月份的数量)
    SELECT f.province_name, LEFT(a.inspected_area_id, 2), 
    COUNT(IF(MONTH(a.create_time)=1,TRUE,NULL)) amount1,
    COUNT(IF(MONTH(a.create_time)=2,TRUE,NULL)) amount2,
    COUNT(IF(MONTH(a.create_time)=3,TRUE,NULL)) amount3,
    COUNT(IF(MONTH(a.create_time)=4,TRUE,NULL)) amount4,
    COUNT(IF(MONTH(a.create_time)=5,TRUE,NULL)) amount5,
    COUNT(IF(MONTH(a.create_time)=6,TRUE,NULL)) amount6,
    COUNT(IF(MONTH(a.create_time)=7,TRUE,NULL)) amount7,
    COUNT(IF(MONTH(a.create_time)=8,TRUE,NULL)) amount8,
    COUNT(IF(MONTH(a.create_time)=9,TRUE,NULL)) amount9,
    COUNT(IF(MONTH(a.create_time)=10,TRUE,NULL)) amount10,
    COUNT(IF(MONTH(a.create_time)=11,TRUE,NULL)) amount11,
    COUNT(IF(MONTH(a.create_time)=12,TRUE,NULL)) amount12,
    COUNT(*)
    FROM check_report a 
    INNER JOIN sys_area_standard f ON f.id = a.inspected_area_id
    WHERE a.is_valid = 1
    AND YEAR(a.create_time) = 2018 
    GROUP BY LEFT(a.inspected_area_id, 2) -- 按省份分组
    
    4.统计每个省指定年份的项目数, 检测设备数(设备间接挂在项目下)等
    不同维度统计(a表有外键来自b表, 既要统计a表某些条件下的数据量, 又要统计b表某些条件下的数据量)
    注: 代码较乱, 挑着看select 字段部分代码
    SELECT b.province_name, LEFT(a.inspected_area_id, 2), 
    		COUNT(DISTINCT IF(a.check_no NOT LIKE '%-%', location.result_no, NULL)) locationAmount, 
    		COUNT(DISTINCT IF(a.check_no NOT LIKE '%-%', device.result_no, NULL)) deviceAmount, 
    		COUNT(DISTINCT IF(a.check_no NOT LIKE '%-%', a.id, NULL)) reportAmount,
    		COUNT(DISTINCT IF(a.check_no LIKE '%-%', location.result_no, NULL)) locationAmount2, 
    		COUNT(DISTINCT IF(a.check_no LIKE '%-%', device.result_no, NULL)) deviceAmount2, 
    		COUNT(DISTINCT IF(a.check_no LIKE '%-%',a.id,NULL)) reCheckReportAmount
    		FROM check_report a
    		LEFT JOIN (
    			SELECT a.* FROM check_record a
    			INNER JOIN (SELECT b.* FROM check_report b 
    						WHERE b.is_valid = 1
    						<if test="year!='' and year!=null">
    							AND YEAR(b.recheck_completed_time)= #{year}
    						</if>
    						) AS check_report_temp
    			ON check_report_temp.id = a.report_id
    			WHERE a.is_valid = 1 AND check_report_temp.is_valid = 1
    			AND template_id IN(1,2,12) 
    			GROUP BY a.result_no
    		)AS location ON location.report_id = a.id
    		LEFT JOIN (
    			SELECT a.* FROM check_record a
    			INNER JOIN (SELECT b.* FROM check_report b 
    						WHERE b.is_valid = 1
    						<if test="year!='' and year!=null">
    							AND YEAR(b.recheck_completed_time)= #{year}
    						</if>
    						) AS check_report_temp
    			ON check_report_temp.id = a.report_id
    			WHERE a.is_valid = 1 AND check_report_temp.is_valid = 1
    			AND template_id IN(3,4,5,6,7,8,9,10,11) 
    			GROUP BY a.result_no
    		)AS device ON device.report_id = a.id
    		LEFT JOIN sys_area_standard b ON b.id = a.inspected_area_id
    		WHERE a.is_valid = 1
    		<if test="year!='' and year!=null">
    			AND YEAR(a.recheck_completed_time)= #{year}
    		</if>
    		GROUP BY LEFT(a.inspected_area_id, 2)
    
    -- 5. 首字母查询g/G开头的
    SELECT a.* FROM (
    SELECT name_ch,
    CHAR(INTERVAL(CONV(HEX(LEFT(CONVERT(name_ch USING gbk),1)),16,10),
          0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,
         0xBBF7,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,
         0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCDDA,0xCDDA,0xCEF4,
         0xD1B9,0xD4D1)+64) AS dxzm,
    CHAR(INTERVAL(CONV(HEX(LEFT(CONVERT(name_ch USING gbk),1)),16,10),
          0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,
         0xBBF7,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,
         0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCDDA,0xCDDA,0xCEF4,
         0xD1B9,0xD4D1)+96) AS xxzm
    FROM student
    ) AS a 
    WHERE a.dxzm = 'G' OR a.xxzm = 'g';
    
    -- 6.模糊匹配多个字段
    <!-- 模糊匹配关键字 -->
        <if test="keyword!=null and keyword!=''">
    	    AND CONCAT(
    			IFNULL(apply_name, ''), ',',  
    			IFNULL(apply_mobile, ''), ',',
    			IFNULL(cname, '')
    		) like CONCAT('%',#{keyword},'%')
    	</if>
    
    -- 7.查询出来insert
    -- 补齐项目-设备关系数据
    INSERT INTO check_report_device (report_id, hospital_id, device_id, check_time)
    SELECT b.id report_id, a.hospital_id, c.hospital_device_id device_id, c.check_time check_time
    FROM hospital_device a
    INNER JOIN check_report b ON b.hospital_id = a.hospital_id AND b.is_valid = 1
    INNER JOIN check_record c ON c.report_id = b.id AND c.is_valid = 1
    WHERE b.status >= 8
    AND NOT EXISTS (SELECT * FROM check_report_device d WHERE d.report_id = b.id AND d.device_id = c.hospital_device_id AND d.is_valid = 1)
    GROUP BY b.id, c.hospital_device_id
    ORDER BY b.id DESC

     

    展开全文
  • 在开发过程中遇到这样的一个需求,通过GROUP BY分组归类后将同属性的字段进行拼接。 表结构为: id value 1 a 1 b 1 c 2 a 2 b 需要得到结果: ...

    在开发过程中遇到这样的一个需求,通过GROUP BY分组归类后将同属性的字段进行拼接。

    表结构为:

    id             value
    1                 a
    1                 b
    1                 c
    2                 a
    2                 b 

    需要得到结果:

    id             value
    1              a,b,c
    2               a,b

    一开始在网上找到的解决办法是利用SQL中的STUFF方法,但是经过测试发现该方法无法使用,提示STUFF方法不存在的错误,猜测可能是MYSQL SERVER版本的问题。由于通过STUFF方法进行拼接的SQL语句过于复杂且暂时找不到STUFF方法不存在的原因,弃用。

    之后选择GROUP_CONCAT方法,具体SQL语句如下:

    SELECT id, GROUP_CONCAT(value) value FROM table GROUP BY id

    如果需要将不同字段进行拼接,方法如下:

    GROUP_CONCAT(attr1,"连接字符的符号",attr2)

     

    如果只是需要将同一条记录的字段拼接可以使用concat:

    select concat(snon,sname,saddress) as 串联字符串 from stud

    转载于:https://www.cnblogs.com/Junsept/p/6810078.html

    展开全文
  • mysql-groupby拼接字段

    2019-07-03 15:06:00
    需求是在一个 sql 查询中有 group by,查询后的结果,要对某个字段 拼接展示,可以用使用函数: group_concat(distinct id) ids 转载于:https://www.cnblogs.com/mojiruo/p/11126497.html...

    需求是在一个 sql 查询中有 group by,查询后的结果,要对某个字段 拼接展示,可以用使用函数:

    group_concat(distinct id) ids

    转载于:https://www.cnblogs.com/mojiruo/p/11126497.html

    展开全文
  • 简单的数据库group by后要进行某字段拼接 就是一个函数 mysql 的 group_concat(v.x) as xxx oracle 的 wm_concat(v.x) as xxx SQL Server 的就比较麻烦 SELECT table.id, stuff(( SELECT ‘,’ + t.xx FROM table t ...
  • 查询出来是两条数据,想把这个字段根据id分组后拼接为1个 利用 group_concat拼接
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • mysql group_concat 把分组字段写成一行 mysql group_concat 把分组字段写成一行 ) mysql group_concat 把分组字段写成一行 ...group_concat( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Sep...
  • 效果:oracle:一、10G以前使用WMSYS.WM_... select id,wm_concat(name) from tab_name group by id; 二、sys_connect_by_path sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用逗号,
  • --通过使用stuff 和For xml path 实现 例子: select CreateBy, STUFF((select ','+ CaseId from N_air_Case where CreateBy=A.CreateBy for xml ... from N_Air_Case A group by CreateBy 例子中 CreateBy为分...
  • Greenplum字段拼接

    千次阅读 2018-12-25 15:21:00
    GP字段拼接相对于Oracle等数据库有细微差距。例如: select A || B || C from table; 我们想得到的结果是:ABC。但是在GP数据库中,假如A、B、C当中任意一个字段为空,那么得到的查询结果ABC也为空。 当然,有解决...
  • oracle中group by字符拼接

    千次阅读 2017-10-27 14:45:50
    字符拼接用逗号隔开select userid as userId,(LISTAGG(campusname,',') WITHIN group(order by campusname))as campusname from T_SYS_CAMPUS_user group by userid
  • mysql group_concat 拼接字段

    千次阅读 2019-07-04 16:33:47
    今天在公司,接到一个需求,还没有动手的时候,觉得好难,做不...group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符‘]) 我想把两个字段的值显示在一个格子里。并且以id的形...
  • 使用group_concat(字段名)函数拼接字段值 SELECT c.pid,group_concat( c.type) qqq FROM loansinfo AS c group by c.pid
  • group by字段后,其他字段的合并处理

    千次阅读 2019-09-18 10:45:10
    今天做题碰到Group by 的问题有点犯迷糊,记录下。 题目: 错误答案: ...select * from table1 where FID in ... select FID from table1 group by FID ...使用了group by 之后,就要求select后面的字段包含在...
  • oracle拼接字段group by的使用

    万次阅读 2016-05-19 21:28:56
    题目: 要求是在oracle数据库中。...id是通过拼接的,oracle有相应的函数:wm_concat和LISTAGG(id,’,’) WITHIN GROUP( ORDER BY depon),得到: 使用的sql: select LISTAGG(id,’,’) WITHIN GROUP( ORDER BY
  • Oracle查询所有字段,再加两个字段拼接,select a.*,(SNO||SNAME) from TEST_STUDENT a; 同理,查询所有字段,其中两个字段求和:(SNO和SAGE都是NUMBER数据类型)select a.*,(SNO+SAGE) from TEST_STUDENT a; select ...
  • 我本在sql层面实现了,用的group by分组 group_concat函数拼接字段。但是被reivew时被告知不能用group_concat函数,复杂操作需要业务层进行。就写了java去实现 group by + group_concat的功能 业务场景脱敏后如下:...
  • 在pandas里对于数值字段而言,groupby后可以用sum()、max()等方法进行简单的处理,对于字符串字段, 如果把它们的值拼接在一起,可以用使用 str.cat() 和 lamda 方法。 如,将下面表格中的内容,对skill字段按照id...
  • oracle group by 字段合并

    千次阅读 2016-11-07 15:05:55
    中国 台北  中国 香港  中国 上海  日本 东京  日本 大阪  要求得到如下结果集:  ------- --------------------  ...使用wm_concat函数,会将字段合并 并用逗号分隔 select COUN
  • 只需要使用GROUP_CONCAT函数可以在使用groupby分组后,将某个字段的值进行拼接合并 使用示例: 数据表:testTb 使用 GROUP_CONCAT函数来实现,我们的sql可以这样写 Select albumId,GROUP_CONCAT(name) from ...
  • group_cancat一般和group by一块使用,在分组之后可以把分组后的某一列每一行的数据都拼接起来; 例如我有一个数据库字段叫做aaa;下面有六条记录1,2,3,4,5,5;此时的结果为一个字符串 1,2,3,4,5,5,如果是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,217
精华内容 8,486
关键字:

groupby字段拼接