免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2706 | 回复: 7
打印 上一主题 下一主题

Mysql相似性统计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-19 10:20 |只看该作者 |倒序浏览
本帖最后由 东方补白 于 2011-08-19 10:26 编辑

现在有个需求,例如mysql中数据存储结构如下
20110817 | A借给B:1元
20110817 | A借给B:2元
20110817 | A借给B:3元
20110817 | A借给B:4元
20110817 | A借给B:5元

这5个数据仅仅是最后的钱数不同,时间和"A借给B"完全相同,Mysql是否有命令能够统计这种相似并给出一个统计值?例如"20110817 | A借给B"发生了5次。
目前想了个比较笨的办法,就是用脚本读出所有的数据并写入一个文本文件,移除掉最后的钱数,然后进行统计,但实在是没啥效率,不太想用。

论坛徽章:
7
寅虎
日期:2014-08-15 12:54:11狮子座
日期:2014-10-28 23:42:142015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:00IT运维版块每日发帖之星
日期:2015-08-04 06:20:00IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-10-10 06:20:00
2 [报告]
发表于 2011-08-19 13:35 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2011-08-19 16:51 |只看该作者
- 如果都是 A->B 那你就算有几行不就行了。如果还有 C->D 之类的,那么请继续往下看
- 如果你的数据库有两列
|| 列1    || 列2       |
|20110817 | A借给B:1元|
|20110817 | A借给B:2元|
|20110817 | A借给B:3元|
|20110817 | A借给B:4元|
|20110817 | A借给B:5元|
那么尝试如下语句:
  1. select 列1, substring_index(列2, ':', 1), count(*)
  2. from 表
  3. group by 列1, substring_index(列2, ':', 1)
复制代码
- 如果你的数据库只有一列
|| 列1                 |
|20110817 | A借给B:1元|
|20110817 | A借给B:2元|
|20110817 | A借给B:3元|
|20110817 | A借给B:4元|
|20110817 | A借给B:5元|
那么尝试如下语句:
  1. select substring_index(列1, ':', 1), count(*)
  2. from 表
  3. group by substring_index(列1, ':', 1)
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2011-08-19 16:52 |只看该作者
让人猜题是不对的。

论坛徽章:
0
5 [报告]
发表于 2011-08-20 17:34 |只看该作者
如果表数据不多 非在线 可用substring

在线 dump到本地后恢复
建立新字段 索引把 substring的结果插入到这个新字段 ,之后通过字段进行统计非常快

大表在线这样substring 很忌讳

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
6 [报告]
发表于 2011-08-21 16:16 |只看该作者
怎么相似了啊?

论坛徽章:
0
7 [报告]
发表于 2011-08-22 15:28 |只看该作者
回复 3# seesea2517


不好意思,最近比较忙没回来看帖子。。。
是有两列的,我试一下第一种方式,多谢!

论坛徽章:
0
8 [报告]
发表于 2011-08-22 15:29 |只看该作者
回复 6# renxiao2003


    第二列除了钱数以外,其他完全相同啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP