SQL按某个字段值相同的记录数从小到大查询排序

来源:百度知道 编辑:UC知道 时间:2024/05/22 14:39:12
按某个字段值相同的记录数从小到大查询排序?
如一个表有一万条记录,有1000条字段B的值为内容1的,2000条字段B的值为内容2的,3000条字段B的值为内容3的,4000条字段B的值为内容4的,

现在要把字段B值相同的总数少的排列在前面,字段B值相同总数大的排列在后面,SQL语句怎么写
我只是打个比方,其实字段B是姓名,可能有成千上万种,是要把每条记录都排序显示出来,有可能吗

这个是可以实现的,但直接实现比较复杂,
可以借助于辅助的一列来简单的实现,
1.就是可以加一列,用来记录与本行中B字段内容相同的记录条数,
使用update语句将新增加的一列进行更新,
2.然后在使用排序,首先对新增加的列进行升序排列,还可以继续在新增加的列内容相同的基础上按照别的字段进行排序,
呵呵,希望能有帮助,^_^

在B上建立一个索引,如果想从小到大就建立一个升序索引
如果想从大到小就建立一个降序索引
然后用一个语句select * from 表名 order by B

select t2.b,t2.cnt from
(select b,count(*) cnt from t1 group by b) t2
order by t2.cnt

你想做的事跟你的假设不符啊
你不就是想按B字段排序吗
在B上建立一个索引,如果想从小到大就建立一个升序索引
如果想从大到小就建立一个降序索引
然后用一个语句select * from 表名 order by B

写的麻烦了点,呵呵,可能还有更好的方法,但我试了,可以实现你的要求
SELECT t.a
FROM t1 t,
(SELECT inerT.a inerTa,COUNT(inerT.a) cnt FROM t1 inerT GROUP BY inerT.a) t3
WHERE t.a = t3.inerTa
ORDER BY t3.cnt

由于你的字段B 的 值特殊是1,2,3,4 ,相同字段总数也特殊
所以你可以 直接使用 select * from 表 order by 字段B
---
如果不同可以使用
select 字段B ,count(字段B)from 表 group by 字段B order by count(字段B)
----如果字段B 里是文字内容,你怎么判断他是相同的内容?有时候中间存在空格SQL会认为是不同的 !