mysql分组,然后组内排序,最后取每组前2条数据
2017-11-21 09:54
375 查看
1.首先根据城市分组,然后查询出点赞数为前2的数据
SELECT
release_city,
SUBSTRING_INDEX(
group_concat(
dazzle_id
ORDER BY
week_praise_num DESC
),
',',
2
)
FROM
sc_dazzle_dazzle_info
WHERE
dazzle_state = 1
AND re_status = 1
GROUP BY
release_city
2.合并这个数据的主键字段为一行
SELECT
group_concat(dazzle_ids)
FROM
(
SELECT
SUBSTRING_INDEX(
group_concat(
dazzle_id
ORDER BY
week_praise_num DESC
),
',',
2
) AS dazzle_ids
FROM
sc_dazzle_dazzle_info
WHERE
dazzle_state = 1
AND re_status = 1
GROUP BY
release_city
) a在这一步获取到的主键数据格式为:
1182,1181,1223,1209,1253,1246,1266,1265,104,103,107,105,1160,1159,1270,1269
3.根据这一行的主键字段查询数据
SELECT
a.release_city,
a.dazzle_id,
a.user_id,
b.usercode,
b.phone,
b.username,
a.introduce,
a.week_praise_num
FROM
sc_dazzle_dazzle_info a
LEFT JOIN sc_user.sc_sys_user b ON a.user_id = b.id
WHERE
LOCATE(
CONCAT(",", dazzle_id, ","),
(
SELECT
CONCAT(",", group_concat(dazzle_ids), ",")
FROM
(
SELECT
SUBSTRING_INDEX(
group_concat(
dazzle_id
ORDER BY
week_praise_num DESC
),
',',
2
) AS dazzle_ids
FROM
sc_dazzle_dazzle_info
WHERE
dazzle_state = 1
AND re_status = 1
GROUP BY
release_city
) tem_a
)
) > 0第散步中将数据变成了
,1182,1181,1223,1209,1253,1246,1266,1265,104,103,107,105,1160,1159,1270,1269,
然后然后再将主键变成[b],1181,的格式去匹配,既可查询出满足要求的数据[/b]
SELECT
release_city,
SUBSTRING_INDEX(
group_concat(
dazzle_id
ORDER BY
week_praise_num DESC
),
',',
2
)
FROM
sc_dazzle_dazzle_info
WHERE
dazzle_state = 1
AND re_status = 1
GROUP BY
release_city
2.合并这个数据的主键字段为一行
SELECT
group_concat(dazzle_ids)
FROM
(
SELECT
SUBSTRING_INDEX(
group_concat(
dazzle_id
ORDER BY
week_praise_num DESC
),
',',
2
) AS dazzle_ids
FROM
sc_dazzle_dazzle_info
WHERE
dazzle_state = 1
AND re_status = 1
GROUP BY
release_city
) a在这一步获取到的主键数据格式为:
1182,1181,1223,1209,1253,1246,1266,1265,104,103,107,105,1160,1159,1270,1269
3.根据这一行的主键字段查询数据
SELECT
a.release_city,
a.dazzle_id,
a.user_id,
b.usercode,
b.phone,
b.username,
a.introduce,
a.week_praise_num
FROM
sc_dazzle_dazzle_info a
LEFT JOIN sc_user.sc_sys_user b ON a.user_id = b.id
WHERE
LOCATE(
CONCAT(",", dazzle_id, ","),
(
SELECT
CONCAT(",", group_concat(dazzle_ids), ",")
FROM
(
SELECT
SUBSTRING_INDEX(
group_concat(
dazzle_id
ORDER BY
week_praise_num DESC
),
',',
2
) AS dazzle_ids
FROM
sc_dazzle_dazzle_info
WHERE
dazzle_state = 1
AND re_status = 1
GROUP BY
release_city
) tem_a
)
) > 0第散步中将数据变成了
,1182,1181,1223,1209,1253,1246,1266,1265,104,103,107,105,1160,1159,1270,1269,
然后然后再将主键变成[b],1181,的格式去匹配,既可查询出满足要求的数据[/b]
相关文章推荐
- 先分组查询,然后为每组数据排序,取出最大值
- MYSQL根据分类分组取每组一条数据且按条件能排序的写法
- MySQL分组然后取每个分组中按照某些字段排序的topN条数据
- mysql查询获取分组后最新的一条记录,策略:先排序,然后在次分组查询(默认第一条),就是最新的一条数据了
- mysql分组取每组前几条记录(排序)
- mysql-利润set变量模拟分组查询每组中的第N条数据
- MySQL 查询分页数据中分组后取每组的前N条记录
- 实现按a字段分组后,在组内再按照b字段排序,之后每组取Top n条数据
- (oracle/mysql)查询出分组查询每组的第一条数据
- oracle查询分组数据中的最后一条数据和每组的数量
- mysql分组取每组前几条记录(排序)
- mysql分组排序去数据的方式
- mysql按照每天分组查询数据结果排序不是从1到31而是1后接10
- mysql实现分组排序,获取第N条数据
- Problem Description 求n个数的最小公倍数。 Input 输入包含多个测试实例,每个测试实例的开始是一个正整数n,然后是n个正整数。 Output 为每组测试数据输出它们的最小公倍数,每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整数。 Sample
- MYSQL-实现ORACLE 和SQLserver数据中- row_number() over(partition by ) 分组排序功能
- sql 如何按时间排序 分组 并且取每组时间最大或最小的一条数据
- MySql 按某一字段分组,同时取每组的前三行数据
- mysql分组查询并只显示每组数据的前N条数据
- oracle或mysql分组查询并且获取前3条排序后的数据