查看: 3380|回复: 4

[SQL] 【讨论】用sql实现一些彩票组合的算法

[复制链接]
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
发表于 2014-6-16 15:37 | 显示全部楼层 |阅读模式
最近世界杯,彩票有点热,因此,想到一个用sql来实现算组合的问题,
例如有以下数据:
RN AA
1 1
2 1
3 1
4 1
以下sql可生成类似数据
with ta as (select rownum rn, trunc(dbms_random.value()*3)+1 aa from dual connect by rownum <4)
select * from ta
以上代表我选择了八场比赛,每场都只选择一个选项
如果我选择2X1,那么就是以上四场任意二场的组合数,其实就是c(4,2) =6个组合,
那么,现在用 sql怎么得出这个6
  以上只是数据的简单化,因为每场比赛我可以选择多个选项,因此数据可能如下
RN AA
1 1
2 3
3 3
4 2

第一场选了1个选项,第二场选了3个,以此类推。
那这个时候,我选择2X1时,这个时候的组合数就是 29 ,3X1的时候是39
aaaaadd.png

具体可参看这里进行选择操作
http://caipiao.weibo.com/jczqAllzjq.do
写一个sql得到组合数,  2X1,3X1用参数代替2或者3
(注:以上4场可由sql自由更改)
求职 : 数据库管理员
认证徽章
论坛徽章:
11
ITPUB社区千里马徽章
日期:2013-06-09 10:15:34懒羊羊
日期:2015-03-04 14:52:11懒羊羊
日期:2015-02-10 13:36:05马上有对象
日期:2015-02-02 12:29:02红宝石
日期:2015-01-19 09:44:10马上有车
日期:2014-11-11 14:16:07马上有车
日期:2014-03-27 15:59:39优秀写手
日期:2014-03-12 06:00:13马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09
发表于 2014-6-16 15:44 | 显示全部楼层
SQL> select * from users;

NAME VALUE         ID
---- ----- ----------
t1   a              1
t2   b              2
t3   c              3
t4   d              4

--实现value列的值的两两组合

SQL> select REPLACE(sys_connect_by_path (value, '#'),'#') combo
  2  from users
  3  where level = 2
  4  connect by prior value < value and level <= 2;

COMBO
-----------------------------------------
ab
ac
ad
bc
bd
cd
6 rows selected

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
 楼主| 发表于 2014-6-16 16:00 | 显示全部楼层
moseslin 发表于 2014-6-16 15:44
SQL> select * from users;

NAME VALUE         ID

我想看到的不只这些, 算法上有亮点那是最好的了

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
11
ITPUB社区千里马徽章
日期:2013-06-09 10:15:34懒羊羊
日期:2015-03-04 14:52:11懒羊羊
日期:2015-02-10 13:36:05马上有对象
日期:2015-02-02 12:29:02红宝石
日期:2015-01-19 09:44:10马上有车
日期:2014-11-11 14:16:07马上有车
日期:2014-03-27 15:59:39优秀写手
日期:2014-03-12 06:00:13马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09
发表于 2014-6-16 16:05 | 显示全部楼层
piliskys 发表于 2014-6-16 16:00
我想看到的不只这些, 算法上有亮点那是最好的了

你还想看到什么?

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
114
SQL数据库编程大师
日期:2013-12-06 13:59:43萤石
日期:2013-12-06 15:50:21ITPUB元老
日期:2007-09-25 17:05:532011数据库大会纪念章
日期:2015-04-23 10:33:192010数据库技术大会纪念徽章
日期:2015-04-23 10:33:19喜羊羊
日期:2015-03-24 13:02:282015年新春福章
日期:2015-03-06 11:57:31喜羊羊
日期:2015-03-04 14:49:39马上有房
日期:2015-01-22 17:30:45马上加薪
日期:2014-12-25 08:48:51
 楼主| 发表于 2014-6-16 16:06 | 显示全部楼层
我说一下,递归很慢,比自关联还要慢,前面那个2X1的sql,可以这样写

select sum(ta.aa*tb.aa) from ta ta ,ta tb
where tb.rn>ta.rn
但是,我想看看有没有更好一些的算法, pl/sql ,c,c++也行, 表用数组代替,

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时9.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表