geektosages 2017-08-28 17:10 采纳率: 0%
浏览 1158
已结题

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

本人需要用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条回答 默认 最新

  • ..天空\.. 2017-08-29 02:15
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题