簡體   English   中英

選擇重復的列中的前5個

[英]Selecting the top 5 in a column with duplicates

我編寫了一個查詢,該查詢提供了一個數據列表,我需要選擇前5個數據。 例如

Num  Name
5    a
4    b
4    c
2    d
1    e
1    f
1    g
0    h

但是,如果我僅使用LIMIT 5,則將省略名稱為f和g的數據點。 我怎么能從中選擇啊。 這只是一個示例數據。 我的實際數據包含更多行,因此我可以僅排除底部行。 編輯抱歉,當我說前5名時,我的意思是前5名。 所以5、4、2、1,0但1個重復,所以我想選擇所有這些重復

您可以通過在SQL邏輯中添加具有遞增行號的新字段來進行計算,如下所示:

Feeds  Num  Name
  1     5    a
  2     4    b
  2     4    c
  3     2    d
  4     1    e
  4     1    f
  4     1    g
  5     0    h

然后將結果限制為所需等級(在您的情況下為5)。 以下是SQL供您參考:

SELECT num, name from (
SELECT @row_number:=CASE WHEN @num=num 
THEN @row_number ELSE @row_number+1 END AS feeds,@num:=num AS num, name
FROM table1, (SELECT @row_number:=0,@num:='') AS t
ORDER BY num desc 
  )t1
  WHERE feeds <= 5

SQL提琴手鏈接

我認為您需要這樣的查詢:

SELECT *
FROM (
    SELECT t1.Num, t1.Name, COUNT(DISTINCT t2.Num) AS seq
    FROM yourTable t1
        LEFT JOIN
        yourTable t2
        ON t1.Num <= t2.Num
    GROUP BY t1.Num, t1.Name) dt
WHERE (seq <= 5);

[SQL小提琴演示]

檢查此查詢

SELECT 
t1.Num, 
t1.Name,
FIND_IN_SET(t1.Num, SUBSTRING_INDEX(
       GROUP_CONCAT(DISTINCT(t2.Num ) ORDER BY t2.Num DESC), ',', 5)
) AS Ord
FROM yourTable t1
LEFT JOIN yourTable t2 ON(t2.Num IS NOT NULL)
GROUP BY t1.Name
ORDER BY t1.Num ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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