我的查询
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)
但是来源似乎总体上不正确
答案 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