[英]Grouping in T-SQL and choosing the longest name
我正在使用SQL Server2012。我正在嘗試解決“典型”分組問題。 但我無法正確解決此問題。
假設您有此表:
我想按職位分組。 這可能很容易:
select position, COUNT(*)
from testsql
group by position
但是,我想按職位分組,並取每個職位最長的名字(我的名字)。
select
myid, myname, position, len(myname) as lenname
from
testsql
group by
myid, myname, position
having
myname = select (max(len(myname))) from testsql /*Obviously it doesn't work */
order by
position asc;
這是使用ROW_NUMBER進行此操作的另一種方法。 它只擊中基表一次。
select myid
, myname
, possition
from
(
select myid
, myname
, possition
, RowNum = ROW_NUMBER() over (partition by possition order by LEN(myname) desc)
from testsql
) x
where x.RowNum = 1
我曾想過使用帶有別名的子查詢。 最后,這將是最佳選擇; 因為在此之后,我進行聯接以將子查詢的MAX(LEN(myname)與普通表的myname鏈接起來。
這是解決方案。 我相信這可能不是最好的。
select myid, myname, testsql.possition, LEN(myname) AS lenname
from testsql
INNER JOIN (
select possition, max(LEN(myname)) AS lenname2
FROM testsql
group by possition) as testsql2
ON testsql.possition = testsql2.possition
where LEN(testsql.myname) = lenname2
GROUP BY myid, myname
ORDER BY possition ASC;
請不要懷疑,如果您願意發表更多評論。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.