SQL怎么输出前n个记录? n是中间计算得到的,不支持变量传递
需求:
表 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_count
select
'old',
num
from
(select round(count(*)*0.3) num from people_crowed_test)a; -- 对象表排序,然后与num表join,rank 输出
insert overwrite table crowed_old_test
select
aid,
buyer_id
from
(
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')b
on a.group_type=b.group_type
-- group_type字段 是强制给两个join表添加的join key
where a.rn<b.num;
SQL怎么输出前n个记录? n是中间计算得到的,不支持变量传递的更多相关文章
- sql 分组后显示每组的前几条记录
sql 分组后显示每组的前几条记录 如 表中记录是 code serialno A1 1 ...
- 各数据库查询前N条记录的SQL语句
sql在不同数据库查询前几条数据 1. ORACLE SELECT * FROM TABLE_NAME WHERE ROWNUM <= N; HQL: from table_name t or ...
- 数据库获取前N条记录SQL Server与SQLite的区别
在使用sql语句进行前20条记录查询时SQL Server可以这样写: 1: select top 20 * from [table] order by ids desc 2: select top ...
- sql 获取每个分组的前N条记录的写法
SELECT * FROM ( --根据 tb表的name进行分组,根据年龄排序 SELECT * , ROW_NUMBER() OVER ( PARTITION BY name ORDER BY a ...
- oracle 取前10条记录
1.oracle 取前10条记录 1) select * from tbname where rownum < 11; 2) select * from (select * from tbnam ...
- Oracle前10条记录
在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10 下面是关于rownum的介绍 ==================== ...
- Oracle 取前几条记录
今天看了篇文章,对oracle取前几条数据的方式和说明,总结比较全,学习了,做个记录点.oracle 取前10条记录 以下内容是原始文章内容,用于做留存阅读. 1.oracle 取前10条记录 1) ...
- Oracle中查询前10条记录
在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10 ----说明:rownum只能用于<或<=运算,如 ...
- Database基础(三):SQL数据导入/导出、 操作表记录、查询及匹配条件
一.SQL数据导入/导出 目标: 使用SQL语句完成下列导出.导入操作: 将/etc/passwd文件导入userdb库userlist表并给每条记录加编号 将userdb库userlist表中UID ...
随机推荐
- parentNode的兼容性问题
IE9下获取对象层次中的父对象,9以上获取文档层次中的父对象 <table><tr><p><td id="haha">haha< ...
- document.readyState等属性
document.readyState:判断文档是否加载完成.firefox不支持. 这个属性是只读的,传回值有以下的可能: 0-UNINITIALIZED:XML 对象被产生,但没有任何文件被加载. ...
- c# HttpClient禁止缓存
using (var client = new HttpClient()) { //方法1: CacheContr ...
- .Net Core 控制台输出中文乱码
Net Core 控制台输出中文乱码的解决方法: public static void Main(string[] args) { Console.Output ...
- 【转】浅析Sql Server参数化查询
转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/21/2460978.html 错误认识1.不需要防止sql注入的地方无需参数化 参数化查询就 ...
- elk-redis
yum install redis -y vim /etc/redis [root@linux-node1 etc]# grep '^[a-z]' /etc/redis.conf daemonize ...
- Python2.5-原理之模块
此部分来自于<Python学习手册>第五部分 一.模块(21章) 模块是最高级别的程序组织单元,它将程序代码和数据封装起来以便重用..模块往往对应于python程序文件.每个文件就是一个模 ...
- JavaScript中的类型转换(二)
说明: 本篇主要讨论JavaScript中各运算符对运算数进行的类型转换的影响,本文中所提到的对象类型仅指JavaScript预定义的类型和程序员自己实现的对象,不包括宿主环境定义的特殊对象(比如浏览 ...
- .net异步编程
现在电脑大部分都是多核心,在处理多线程方便有很大优势,异步调用方法的时候可以立即返回执行其他程序,进行异步编程会让程序运行效率更高. 我也是刚刚关注异步编程方面知识,也有很多不是很理解,所以想向大神请 ...
- [转] Asp.net vNext webapi 自托管
[声明]本文转自:http://www.cnblogs.com/ListenCode/p/4206204.html 转载需注明! 微软推出的Asp.net vNext(asp.net 5.0)的其中的 ...