2 geektosages geektosages 于 2017.08.29 01:10 提问

需要用MySQL实现一个频次统计排序的功能,并进行表关联输出 20C

本人需要用MySQL实现如下功能:

表A

name,ID

AAA,1000.1.1

AAA,1000.1.1

BBB,1000.1.3

BBB,1000.1.3

CCC,1000.1.4

CCC,1000.1.4

DDD,1000.1.5

DDD,1000.1.5

EEE,1000.1.7

EEE,1000.1.7

FFF,1011.8.9

GGG,1011.8.10

HHH,1011.8.11

III,1011.8.12

JJJ,1011.8.13

KKK,1011.8.14

KKK,1011.8.14

LLL,1011.8.15

MMM,1011.8.16

表B

ID1,name1,ID2,name2

1000.1.3,BBB,6016,01A

1000.1.4,CCC,6016,01A

1000.1.5,DDD,6016,01A

1000.1.9,NNN,6016,01A

1000.1.26,OOO,6009,01B

1000.1.193,PPP,6006,01C

1000.1.194,QQQ,6007,01D

1000.3.8,RRR,7008,02A

1000.4.12,SSS,NULL,NULL

表C

shortID,ID2,name2

1000.1,6016,01A

表D和表B结构一样,用来存放最终想要的结果

注明下ID,ID1,ID2之类的字段都是“数字1.数字2.数字3”这样的结构

要实现的功能是:

1.清除表A的重复记录

2.生成表C:只有当表B的ID2以6开头且不为NULL的时候,才进行下面的操作

shortID是表B的ID1去掉最后一个点以及数字3之后的值。

筛选出所有的shortID,ID2,name2组合,然后统计频次,如下:

1000.1,6016,01A

1000.1,6016,01A

1000.1,6016,01A

1000.1,6016,01A

1000.1,6009,01B

1000.1,6006,01C

统计结果(最后一列是频次):

1000.1,6016,01A,4

1000.1,6009,01B,1

1000.1,6006,01C,1

那么就把频次最高的一行1000.1,6016,01A放入表C,其余忽略

对于其他shortID的各种组合,也进行同样处理,并选出频次最高的一行放入表C。

3.用表A的ID来关联表B的ID1

如果能找到相关结果(若ID2值为NULL,算没找到),就直接把表B的那一行插入表D

如果找不到相关结果,那么就拿A的ID的“数字1.数字2”去和表C的shortID进行匹配

    能匹配上的就按照如下格式输出到表D:表A的ID,表A的name,表C的ID2,表C的name2

    匹配不上,就忽略,不输出。

遍历表B的所有行

如果这一行的ID2不是NULL,就直接插入到D中,注意不要和表D当中已有的记录重复。

如果这一行的ID2是NULL,就拿这一行的ID1和上面表A的ID以同样的处理方式来处理。

2个回答

qq_22590821
qq_22590821   2017.08.29 10:15

找找MySQL中 if else 语句,希望能帮到你!

sunnywoni
sunnywoni   2017.08.29 16:04

问的啥几把玩意。理清楚再问吧

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java基础测试题
 第一题:编写Java程序,实现的功能是:输入一行字符,分别统计并输出该字符串中的英文字母、空格、数字和其他字符的个数。package cn.test.input; import java.util.Scanner; public class Test { public static void main(String[] args) { // 第一题:编写Java程序,实现的功能是:...
java 统计10000篇文章中不同单词出现的次数并以次序排序
统计10000篇文章中不同单词出现的次数并以次序排序 此次统计从两方面入手:一是单线程读取10000个文件;二是打开10000个线程,每个线程读取一个文件 单线程程序 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.ArrayList; im
Java实现 统计单词出现的次数并按照单词频率从高到低输出
import java.util.*; import java.util.Map.Entry; public class CountWord { public static void sort(Map map) { List> list=new ArrayList>(); for (Entry entry : map.entrySet()) { list.add(entry)
java读取文件内容按照值出现的次数排序
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; i
字符串分析,分别输出字符串中个单词,并统计出单词个数
字符串分析,分别输出字符串中个单词,并统计出单词个数
数字在排序数组中出现的次数java实现
题目描述 统计一个数字在排序数组中出现的次数。 解题思路 数组是排序的,所以重复出现的数字是相邻排列的。 用二分查找算法,找到第一次出现的位置,和 最后一次出现的位置。 判断第一次出现的位置条件为:当前数字的前一个是否与之相等,若是则继续查找,否则该位置就是第一次出现的位置。 判断最后一次出现的位置条件为:当前数字的后一个是否与之相等,若是则继续查找,否则该位置
关于mysql中对数据先统计再排序的操作
先上两张表:第一张:一个包含商品的指南里面放了一些商品第二张:用户喜欢的商品要求:搜索指定指南下的商品限定不超过7个并且这里面的商品还得按照用户喜欢的数量来进行倒序排序。结果如下:SELECT gs.sku_id FROM guide_sku gs LEFT JOIN follow_sku fs on gs.sku_id = fs.sku_id wher
统计数据库表中关键词出现的次数,按次数大小降序排序
在做搜索时遇到一个搜索提示的问题,我就想着记录用户输入的关键词,然后按出现次数最多的来推荐到搜索列表展示给用户。SELECT COUNT(keyword),keyword FROM `destoon_keyword` GROUP BY keyword ORDER BY COUNT(keyword) DESC LIMIT 0,6;
对文本文件中的单词统计出现的次数(即词频)并按词频的从高到低排序
//业务需求:求给定words.txt中的相同单词出现的次数(即词频),并按照单词出现次数的从高到低排序!(原文本文件中只有单词和空格,且全为小写) //关键词  IO流 HashMap ArrayList  //业务分析:1.读入文件,拿到内容;2.解析文件,进行切分;3.将每个单词放入集合;4.统计出现次数并排序
使用Java统计字母并且按照字母的次数排序
public class Main { public static void main(String[] args) throws IOException { //存放读取的字符 StringBuffer sb=new StringBuffer(); //接受文件路径 Scanner input = new Scanner(Syst