2017-06-21 157 views
0

標記的X最大的數字:我怎麼能在給定的簡單表查詢

Value 
10 
4 
7 
2 
4 
6 

我怎樣寫一個選擇查詢標籤的X最大的值。例如,如果標記了3個最大值,則在所需的查詢輸出之下。

Value IsBiggest 
10  true 
4  false 
7  true 
2  false 
4  false 
6  true 

回答

1

一種可能的方式:

(select value, 'true' as IsBiggest from simple_table order by value desc limit 3) 
union all 
(select value, 'false' as IsBiggest from simple_table order by value desc limit 3, 9223372036854775807) 
-1

你可以值,比標記X第一個項目進行排序: 實例甲骨文:

WITH tab AS (
SELECT 10 AS VALUE FROM dual 
UNION SELECT 4 AS VALUE FROM dual 
UNION SELECT 7 AS VALUE FROM dual 
UNION SELECT 2 AS VALUE FROM dual 
UNION SELECT 4 AS VALUE FROM dual 
UNION SELECT 6 AS VALUE FROM dual 
) 
SELECT VALUE, CASE WHEN ROWNUM <=3 THEN 'true' ELSE 'false' END AS IsBigest FROM (SELECT VALUE FROM tab ORDER BY VALUE DESC); 

輸出:

10 true 
7 true 
6 true 
4 false 
2 false 
+0

downvoted MySQL不支持窗口函數,如WITH AS –

-1

對於3個最高值標記你應該嘗試:

select top (3) Value from my_table 
order by Value desc 
+0

Downvoted MySQL支持TOP –

1

這應該做的伎倆:

SELECT test.value, 
     CASE WHEN X.isBiggest IS NULL THEN false ELSE true END isBiggest 
FROM test 
    LEFT JOIN (
     SELECT value, true isBiggest 
     FROM test 
     ORDER BY value DESC 
     LIMIT 0,3 
    ) X ON 
    test.value = X.value 

如果你只頂一下3:

SELECT value 
FROM test 
ORDER BY value DESC 
LIMIT 0,3 
+0

您的解決方案工作得很好,但Oto Shavadze解決方案在我的方案中稍快。 – Nebu

0

你可以試試這個

SELECT tb1.value , IF(tb2.isBiggest ,1, 0) AS isBiggest FROM `sample_table` tb1 LEFT JOIN (SELECT value , 1 AS isBiggest 
FROM `sample_table` 
ORDER BY value DESC 
LIMIT 3 
) tb2 ON tb1.value = tb2.value