我的查询
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
,但是查询仍然会获取所有行,因此就像隐藏问题一样。
因为如果我使用mon = Y
,我不想查询1000行,但只有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