簡體   English   中英

如何在使用SUM()和JOIN的查詢中選擇具有最高值的ROW?

[英]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 = xvalue = 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 = Yvalue = 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.

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