SQL查询:需要按计数排序,大多数必须在顶部,其余紧随其后
表 预期成果:SQL查询:需要按计数排序,大多数必须在顶部,其余紧随其后,sql,sql-server-2008,tsql,sql-order-by,Sql,Sql Server 2008,Tsql,Sql Order By,表 预期成果: JobCode Job1 Job2 Job3 zip ------- ---- ---- ---- ---------- F F S NULL 90030 F F S NULL 90031 F F S NULL 90031 F F S NULL 90034 F F NULL 90034 F F S NULL 90034 F
JobCode Job1 Job2 Job3 zip
------- ---- ---- ---- ----------
F F S NULL 90030
F F S NULL 90031
F F S NULL 90031
F F S NULL 90034
F F NULL 90034
F F S NULL 90034
F F S NULL 90034
F F NULL 90034
F F S NULL 90035
F F NULL 90035-4640
那些拉链相同的应该在上面,然后其他的就在后面。
按Zip排序不起作用,因为它按Zip排序,而不是按发生次数排序
使用SQL Server 08来实现这一点,您应该针对一个子查询进行连接,该子查询返回每个zipcode的计数。联接子查询只需要提供计数(即使未显示),而主表
yourtable
提供所有其余列
JobCode Job1 Job2 Job3 zip
------- ---- ---- ---- ----------
F F S NULL 90034
F F NULL 90034
F F S NULL 90034
F F S NULL 90034
F F NULL 90034
F F S NULL 90031
F F S NULL 90031
F F S NULL 90030
F F S NULL 90035
F F NULL 90035-4640
SELECT
JobCode, Job1, Job2, Job3, order_jobs.zip
FROM
jobs
JOIN (SELECT zip, COUNT(*) AS zipcount FROM jobs GROUP BY zip) ordering
ON jobs.zip = ordering.zip
ORDER BY zipcount DESC
SQL Server 2008在
SELECT
JobCode,
Job1,
Job2,
Job3,
subq.zip
FROM
yourtable
JOIN (
/* Subquery returns count per zip group */
SELECT zip, COUNT(*) AS numzip
FROM yourtable
GROUP BY zip
) subq ON yourtable.zip = subq.zip
ORDER BY numzip DESC
如果不需要查看附加列,则可以将COUNT()OVER
子句移动到ORDER BY子句中
select *, c = count(1) over (partition by zip)
from tbl
order by c desc;
select JobCode, Job1, Job2, Job3, zip
from tbl
order by count(1) over (partition by zip) desc;