如何使用SUM()和JOIN在查询中选择具有最高值的行?

时间:2018-02-14 18:02:08

标签: mysql sql

我的查询

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)

但是来源似乎总体上不正确

3 个答案:

答案 0 :(得分:0)

只需在查询中添加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;

只返回第一行(注意我刚刚添加了最后一行)。

答案 1 :(得分:0)

您将数据分组到表格上的原始值而不是rhe值的总和。试试这个:

let highest = this.users.reduce((a, b) => a.credits > b.credits ? a : b);

答案 2 :(得分:0)

在你的条款中试试这个:

AND value in (select MAX(value) from values)

intead of

AND value = MAX(value)

并包含

AND rownum = 1