sql 语句问题,按某列值的记录个数多少 对记录排序,请点进来看详细描述。求助啊~~

2014-06-20 20:43:27 +08:00
 Ransford
表:
id    order
1     1
2     1
3     2
4     2
5     2
6     3

我想得到:
id      order
3     2
4     2
5     2
1     1
2     1
6     3

就是order值多的那组记录在前 降序
这个sql怎么写啊~~~我用的是mysql.表名为help
2582 次点击
所在节点    问与答
9 条回复
andyhu
2014-06-20 21:50:43 +08:00
select * from help as h order by (select count(*) from help where help.order=h.order) desc
andyhu
2014-06-20 21:51:32 +08:00
order字段记得做索引
andyhu
2014-06-20 21:59:00 +08:00
不过感觉需求上有点不太对劲,楼主的需求应该用group by可以搞定的,不一定非要顺序列出所有的id,换group by后性能应该有所提升
yangqi
2014-06-20 23:23:08 +08:00
@andyhu 这完全是无法运行的语句。。。逻辑上也不对

这个需求和表的设计对不上,所以语句写出来很别扭,效率也不会高的
andyhu
2014-06-20 23:49:00 +08:00
@yangqi 可以运行的,试试就知道了。效率低倒是真的,一般不会这么写

CREATE TABLE IF NOT EXISTS `help` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`order` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `help` (`id`, `order`) VALUES
(1, 2),
(2, 2),
(3, 2),
(4, 1),
(5, 1),
(6, 3);
smblog
2014-06-21 01:02:09 +08:00
select id,order from (select count(*) as OrderC,id from help group by id) tt order by tt.OrderC desc
smblog
2014-06-21 01:06:46 +08:00
写错了。。不过大概就是这样的思路。。
Ransford
2014-06-21 19:15:30 +08:00
@smblog
@andyhu
多谢二位~~我昨天是这个思路解决的,用的jion
select * from `wage_month_detail_info` as A join
(SELECT perType,count(perType) as c FROM `wage_month_detail_info` group by perType) as B on A.perType=B.perType
order by B.c desc;
Ransford
2014-06-21 19:16:42 +08:00
@smblog
@andyhu
perType就是例子中的order

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/118687

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX