![](/img/trans.png)
[英]In MySQL, How do I Select the Column in a Row with the Highest Value
[英]How do I SELECT the ROW with Highest Value in a Query with SUM() and JOIN?
我的查詢在這里
http://sqlfiddle.com/#!9/8bcf5a/20/0
SELECT i.id
, i.mon
, i.item
, SUM(v.value) value
FROM items i
LEFT
JOIN values v
ON v.item_id = i.id
WHERE mon = 'Y'
GROUP
BY i.id
ORDER
BY v.value DESC;
我得到mon = Y
所有行,但是我只想獲得mon = x
和value = MAX
的最高行。
所以,而不是得到
id mon item value
2 Y C1 17
1 Y C1 11
3 Y C1 5
我想得到
id mon item value
2 Y C1 17
我可以使用LIMIT 1
,但是查詢仍然會獲取所有行,因此就像隱藏了問題一樣。
因為我不希望查詢獲取1000行,如果我的mon = Y
,但是只有mon = Y
且value = MAX
我嘗試過類似的東西
AND value = MAX(value)
要么
AND value = TOP(value)
但是,從整體上看,這似乎是不正確的
只需向您的查詢添加LIMIT
子句,如下所示:
SELECT
i.`id`,i.`mon` , i.`item`, SUM(v.`value`) AS value
FROM `items` i
LEFT JOIN `values` v ON v.`item_id` = i.`id`
WHERE mon = 'Y'
GROUP BY i.`id`
ORDER BY v.`value` DESC
LIMIT 1;
那只會返回第一行(注意,我剛剛添加了最后一行)。
您正在將數據分組到表的原始值上,而不是rhe值的總和上。 嘗試這個:
SELECT i.id
, i.mon
, i.item
, SUM(v.value) totalValue
FROM items i
LEFT
JOIN values v
ON v.item_id = i.id
WHERE mon = 'Y'
GROUP BY i.id, i.mon , i.item
ORDER BY SUM( v.value) DESC
LIMIT 1;
在您的子句中嘗試以下操作:
AND value in (select MAX(value) from values)
的
AND value = MAX(value)
並包括
AND rownum = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.