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 镍氢电池充电器设计实物使用原理
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号