mysql获取一列的不重复所有列

这样的数据,我要去重复得到疾病的所有

SELECT 
cc.bbb
from 
(

SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX((select group_concat(physical_condition) from elder),',',help_topic_id+1),',',-1) AS bbb
FROM 
    mysql.help_topic 
WHERE 
    help_topic_id < LENGTH((select group_concat(physical_condition) from elder))-LENGTH(REPLACE((select group_concat(physical_condition) from elder),',',''))+1
        
) cc
where cc.bbb != ''
 GROUP BY  bbb

 

发现少了 是长度问题

执行这个后 在运行上面的sql 完成
SET GLOBAL group_concat_max_len=10240000;
SET SESSION group_concat_max_len=10240000;

结果:

还有java解决办法:

List<String> disease = elderMapper.selectAllDisease();
		
Map<String,Integer> stats = new HashMap<String,Integer>();
for(String row : disease){
			String[] temps = row.split(",");
			for(String temp : temps){
				if(stats.containsKey(temp))
					stats.put(temp,stats.get(temp) + 1);
				else
					stats.put(temp,1);
			}
}
		
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(stats.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
            // 降序排序
            public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
                return -o1.getValue().compareTo(o2.getValue());
            }
});
		
for(String d : stats.keySet()){
	System.out.println(d + "--" + stats.get(d));
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果要将以逗号分隔的数字转为分开的一列,可以使用MySQL中的内置函数SUBSTRING_INDEX和GROUP_CONCAT。下面是一个示例: 假设有以下数据: ``` id numbers 1 1,2,3 2 4,5,6 ``` 我们希望将numbers中的数字分开成单独的一列。可以使用下面的查询语句实现这个需求: ```sql SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(numbers,',',n),',',-1) AS number FROM ( SELECT id, numbers, (LENGTH(numbers) - LENGTH(REPLACE(numbers, ',', '')) + 1) AS count FROM your_table ) AS t CROSS JOIN ( SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 ) AS numbers WHERE n <= count ORDER BY id, number ``` 上述查询语句中的your_table应该替换为你实际的表名。 执行以上查询将会得到如下结果: ``` id number 1 1 1 2 1 3 2 4 2 5 2 6 ``` 在这个结果中,每个数字都被分开成了一行,并与原始数据中的id对应。 ### 回答2: 要将以逗号分隔的数字转为分开的一列,可以使用MySQL的字符串函数来实现。 首先,使用SUBSTRING_INDEX函数将字符串按逗号分隔,并提出第一个数字,然后使用SUBSTRING函数将第一个数字之后的部分删除,得到第一个数字。 接着,使用SUBSTRING_INDEX函数将剩下的字符串再次按逗号分隔,并提出第一个数字,然后再次使用SUBSTRING函数将第一个数字之后的部分删除,得到第二个数字。 重复以上步骤,直到将所有数字都分离出来为止。 示例如下: ```sql SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', 1), ',', -1) AS num1, SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', 2), ',', -1) AS num2, SUBSTRING_INDEX(SUBSTRING_INDEX(numbers, ',', 3), ',', -1) AS num3 FROM your_table; ``` 其中,numbers是包含以逗号分隔的数字的名,your_table是表名。 在上述示例中,使用了三个SUBSTRING_INDEX函数来提出三个数字,你可以根据实际情况增加或减少函数的数量。 最后,将分离出来的数字分别命名为num1、num2、num3等,并从表中选出来。 注意,此方法适用于已知分隔符数量的情况。如果分隔符数量不确定或不固定,可能需要使用递归或自定义函数来处理。 ### 回答3: 在MySQL中,可以使用内置的字符串函数将以逗号分隔的数字转为分开的一列。 假设有一个名为numbers的表,其中有一个名为num_list的字段存储了以逗号分隔的数字。我们希望将这些数字分离出来并放到新的中。 首先,可以使用SUBSTRING_INDEX函数获取逗号前面的子串。例如,可以使用以下查询来获取第一个数字: SELECT SUBSTRING_INDEX(num_list, ',', 1) AS num1 FROM numbers; 然后,使用SUBSTRING函数获取逗号后面的子串。例如,使用以下查询获取第二个数字: SELECT SUBSTRING(SUBSTRING_INDEX(num_list, ',', 2), LENGTH(SUBSTRING_INDEX(num_list, ',', 1)) + 2) AS num2 FROM numbers; 可以根据需要重复以上过程,获取更多的数字。 如果希望将这些数字放到新的中,可以使用UPDATE语句。以下是一个示例: UPDATE numbers SET num1 = SUBSTRING_INDEX(num_list, ',', 1), num2 = SUBSTRING(SUBSTRING_INDEX(num_list, ',', 2), LENGTH(SUBSTRING_INDEX(num_list, ',', 1)) + 2), num3 = SUBSTRING(SUBSTRING_INDEX(num_list, ',', 3), LENGTH(SUBSTRING_INDEX(num_list, ',', 2)) + 2) ... numN = SUBSTRING(SUBSTRING_INDEX(num_list, ',', N), LENGTH(SUBSTRING_INDEX(num_list, ',', N-1)) + 2); 在上述示例中,num1、num2、num3等是新的,用于存储分隔的数字。N表示总共有多少个数字需要分隔。 通过以上的方法,可以将以逗号分隔的数字转为分开的一列。请注意,这些查询和更新语句中都假设数字之间只用逗号分隔,没有额外的空格或其他字符。如果数字表的格式与此不同,需要做适当的调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值