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
上传中...
上传图片
插入图片