簡體   English   中英

在T-SQL中分組並選擇最長的名稱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM