博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL怎么输出前n个记录? n是中间计算得到的,不支持变量传递
阅读量:6643 次
发布时间:2019-06-25

本文共 1033 字,大约阅读时间需要 3 分钟。

需求:

表 people_crowed_test

       

按view_num排序后,输出该表的记录前30%的aid, buyer_id;

需求场景下的诸多限制: 

1) 不支持变量赋值,也就是无法把中间结果保存到变量了。 自然也无法支持  limit {变量}

2) (select a from ...) 这种数据无法用于where 中的a> ... 比较中

3)不支持 Top N

 

终于捣鼓出了一种死笨死笨的写法,希望以后有改善。

-- 把中间结果 num 保存在表中-- 并计算其30%后的四舍五入整数insert overwrite table test_record_countselect         'old',     numfrom          (select round(count(*)*0.3) num from people_crowed_test)a;-- 对象表排序,然后与num表join,rank 输出insert overwrite table crowed_old_testselect         aid,     buyer_idfrom (    select       'old' group_type,       aid,       buyer_id,           rank() over(partition by rank_id order by view_num desc) as rn    from    (    select            'same'   rank_id,   --  为了对所有记录排序,设置的by 键       aid,       buyer_id,       view_num    from people_crowed_test    )a1)a join (select  group_type, num from test_record_count where group_type='old')bon a.group_type=b.group_type   -- group_type字段 是强制给两个join表添加的join keywhere a.rn
posted on
2016-04-27 15:34 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/skyEva/p/5439099.html

你可能感兴趣的文章
遗留的问题,
查看>>
地址,
查看>>
RegexHelper(正则表达式)
查看>>
ORACLE中 schema 和 user 区别
查看>>
Redhat6.5使用centos yum源
查看>>
unity3d与web交互的方法
查看>>
寒假集训日志(三)——数论
查看>>
javascript正则表达式
查看>>
QDU68 UP UP UP!(最长上升子序列个数)
查看>>
ls常用参数
查看>>
MySQL简单查询详解-单表查询
查看>>
MVC音乐商店 - 第二部分:控制器
查看>>
SLF4J的使用
查看>>
爬取新闻列表
查看>>
HttpClientUtil 工具类 实现跨域请求数据
查看>>
S8-codelab02
查看>>
怎么看iOS human interface guidelines中的user control原则
查看>>
Mac OS10.11更新ruby,gem,安装cocoapods
查看>>
qhfl-6 购物车
查看>>
双十一错题集
查看>>