我有一組數據一樣的:不能爲最多包含查詢得到正確的列值()
Nm | item | type | value
21 | 19 | A | 15
22 | 40 | B | 10
21 | 20 | A | 80
32 | 40 | C | 40
我試了幾個疑問,我總是得到:(備案NM = 21)
Nm | item | type | max(value)
21 | 19 | A | 80
這不是我想要的,因爲最大值是從項目= 20
我有一組數據一樣的:不能爲最多包含查詢得到正確的列值()
Nm | item | type | value
21 | 19 | A | 15
22 | 40 | B | 10
21 | 20 | A | 80
32 | 40 | C | 40
我試了幾個疑問,我總是得到:(備案NM = 21)
Nm | item | type | max(value)
21 | 19 | A | 80
這不是我想要的,因爲最大值是從項目= 20
您需要查找特定nm具有最大值的行。爲此,您需要查找每個nm並在子查詢中查找最大值,然後將該最大值與主查詢進行比較。
查詢:
select *
from item_table it_o
where it_o.value in
(select max(value)
from item_table it_i
where it_i.nm=it_o.nm)
輸出:
nm item type value
22 40 B 10
21 20 A 80
32 40 C 40
@TobySpeight完成:) –
感謝您完成任務的完美查詢,並花費超過5分鐘時間獲取結果。非常感謝。 –
select
* from table t1 where nm=21
order by value desc
limit 1
SELECT a.*
FROM YourTable a
JOIN
(SELECT nm
, MAX(value) value
FROM YourTable
GROUP
BY nm
) b
ON b.nm = a.nm
AND b.value = a.value
你可以嘗試這樣的
select * from tablename where value = (SELECT MAX(value) FROM tablename)
OR
select top 1 * from tablename order by value desc
SELECT Nm, item, type, value
FROM (SELECT Nm, MAX(value) AS value
FROM YourTable
GROUP
BY Nm) AS m
NATURAL JOIN YourTable
WHERE Nm = 21;
我一直在問到所以這裏提供解釋得好:
首先,你需要找到的最大值(你沒有給表名,所以我要使用YourTable
):
SELECT MAX(value) AS value
FROM YourTable
WHERE item = 21
其次,要項目,它需要連接上述回表表達式YourTable
所有屬性,但我們不能這樣做,因爲我們還沒有投影Nm
屬性。
人們很容易認爲,我們可以簡單的項目屬性:
SELECT Nm, MAX(value) AS value
FROM YourTable
WHERE item = 21
然而,這使得SQL BARF。
SELECT Nm, MAX(value) AS value
FROM YourTable
WHERE item = 21
GROUP
BY Nm
現在我們可以一起回YourTable
但同樣事情並非如此:要使用SQL的非常笨拙GROUP BY
語法使SQL高興我們必須說,我們通過總結其列(不管它是多麼明顯!)簡單:
SELECT Nm, item, type, value
FROM (SELECT Nm, MAX(value) AS value
FROM YourTable
WHERE Nm = 21
GROUP
BY Nm)
NATURAL JOIN YourTable;
同樣,SQL barfs因爲我們還沒有給出派生表的名字。現在你可能想知道,如果我們使用NATURAL JOIN
,給它起一個名字有什麼意義,其中一個優勢是INNER JOIN
,就是我們不需要範圍變量?那麼,沒有意義,這是不需要的。但是,SQL標準聲明它是必需的。因此,我們被迫包括名稱,毫無意義的,雖然它是:
SELECT Nm, item, type, value
FROM (SELECT Nm, MAX(value) AS value
FROM YourTable
WHERE Nm = 21
GROUP
BY Nm) AS pointless_name
NATURAL JOIN YourTable;
注意我上面的SQL代碼是不同的:一個適用於自己的經驗來改變查詢的結構,使其通常更加有用(抱歉,我沒有超越直覺的解釋!)。
@TobySpeight:請給我的解釋一讀。反饋總是歡迎:) – onedaywhen
這是一個傑出的答案!感謝您的編輯。 –
你要做order by item desc
所以最大值是第一位的,然後通過做limit 1
SELECT * FROM TABLE ORDER BY VALUE DESC LIMIT 1
只選擇一排,也可以在子查詢中選擇最大的ID,然後在主查詢該ID(這種查詢可以返回多個行)
SELECT * FROM TABLE WHERE VALUE IN (SELECT MAX(VALUE) FROM TABLE)
你能否解釋一下你的問題在平局的情況下產生了什麼?我不認爲他們完全相同。 –
這不是等價的,首先是首選,如果你使用大量數據,第二個查詢會導致性能問題,因爲它是交替地兩個查詢一個是子和一個是主 – Jazzzzz
我是對的說第一個將只返回1行,而第二個將返回關節最大值的所有行?附:該問題需要'MAX(value)',所以你可以[edit]最大化'value'而不是'item' /'id'。 –
什麼是NM = 21的記錄您的預期輸出 – TheGameiswar
:項目應爲20不19 –
*「我嘗試了幾種查詢」 * ... ...這是?當你甚至不能向我們展示你有多接近時,很難提供幫助,我們不可能發現你的誤解,因此我們可以幫助你學習。 –