mysql实现分组排序,获取第N条数据
2016-08-25 10:52
537 查看
由于业务需求需要获取所有用户的第N条记录目前想到两种方式:
第一种方式用group_concat() 列转行 然后substring_index() 截取的方式性能扩展不太好:
select t.userId,
substring_index(group_concat( t.mount ORDER BY t.createtime ),',',2) amount,
substring_index(group_concat( t.other ORDER BY t.createtime ),',',2) other
from
t
group by t.userId
第二种使用rownum性能较好比较灵活
</pre><pre name="code" class="sql">SELECT
id,
userId,
content,
rank
FROM
(
SELECT
b.id,
b.userId,
b.content ,@rownum :=@rownum + 1,
IF (
@pdept = b.userId ,@rank :=@rank + 1 ,@rank := 1
) AS rank,
@pdept := b.userId
FROM
(
SELECT
id,
userId,
content
FROM
myTable
WHERE
pnrStatus = 1
ORDER BY
userId,
id
) b,
(
SELECT
@rownum := 0,
@pdept := NULL ,@rank := 0
) c
) result
第一种方式用group_concat() 列转行 然后substring_index() 截取的方式性能扩展不太好:
select t.userId,
substring_index(group_concat( t.mount ORDER BY t.createtime ),',',2) amount,
substring_index(group_concat( t.other ORDER BY t.createtime ),',',2) other
from
t
group by t.userId
第二种使用rownum性能较好比较灵活
</pre><pre name="code" class="sql">SELECT
id,
userId,
content,
rank
FROM
(
SELECT
b.id,
b.userId,
b.content ,@rownum :=@rownum + 1,
IF (
@pdept = b.userId ,@rank :=@rank + 1 ,@rank := 1
) AS rank,
@pdept := b.userId
FROM
(
SELECT
id,
userId,
content
FROM
myTable
WHERE
pnrStatus = 1
ORDER BY
userId,
id
) b,
(
SELECT
@rownum := 0,
@pdept := NULL ,@rank := 0
) c
) result
相关文章推荐
- oracle或mysql分组查询并且获取前3条排序后的数据
- MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能
- mysql查询获取分组后最新的一条记录,策略:先排序,然后在次分组查询(默认第一条),就是最新的一条数据了
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能.
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- mysql 实现row_number() over(partition by ) 分组排序功能
- MYSQL 实现 MSSQL row_number() 类似的分组排序
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- [转]WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- MySQL分组然后取每个分组中按照某些字段排序的topN条数据
- sql实现分组排序-实例分别获取男女成绩前三名的学生姓名
- WPF and Silverlight 学习笔记(二十五):使用CollectionView实现对绑定数据的排序、筛选、分组
- mysql中随机获取排序条件中的指定数量数据
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能优化
- Atitit.并发测试解决方案(2) -----获取随机数据库记录 随机抽取数据 随机排序 原理and实现
- C#自定义网格组件(DataGridView)实现数据分组、排序
- sql获取分组排序后数据的脚本
- [摘抄]MySQL分组后获取每个分组下的4笔数据
- mysql分组排序去数据的方式