標記的X最大的數字:我怎麼能在給定的簡單表查詢
Value
10
4
7
2
4
6
我怎樣寫一個選擇查詢是標籤的X最大的值。例如,如果標記了3個最大值,則在所需的查詢輸出之下。
Value IsBiggest
10 true
4 false
7 true
2 false
4 false
6 true
標記的X最大的數字:我怎麼能在給定的簡單表查詢
Value
10
4
7
2
4
6
我怎樣寫一個選擇查詢是標籤的X最大的值。例如,如果標記了3個最大值,則在所需的查詢輸出之下。
Value IsBiggest
10 true
4 false
7 true
2 false
4 false
6 true
一種可能的方式:
(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)
你可以值,比標記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
對於3個最高值標記你應該嘗試:
select top (3) Value from my_table
order by Value desc
Downvoted MySQL支持TOP –
這應該做的伎倆:
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
您的解決方案工作得很好,但Oto Shavadze解決方案在我的方案中稍快。 – Nebu
你可以試試這個
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
downvoted MySQL不支持窗口函數,如WITH AS –