SQL Query group by, имея min, не выбирая минимальное значение? - PullRequest
0 голосов
/ 25 февраля 2019
select s.attr1, s.attr2
from table1 s
where s.primarykey in 
    (select g.primarykey
    from table2 g
    group by g.primarykey
    having avg(g.numattr) > 80)
group by s.attr1
having min(s.attr3)
order by (s.attr2);

Предполагается, что в этом запросе проверяется среднее значение numattr> 80 в таблице 2, а затем для первичных ключей, которые соответствуют этому, для каждого attr1 выберите самое низкое с помощью attr3, а затем упорядочьте их по attr2.Я получаю результат, который не выбирает минимальное значение, и я не уверен, почему.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019
SELECT s.attr1, s.attr2, 
FROM table1 s
WHERE s.attr3 = 
(SELECT min(s2.attr3) from table1 s2 where s.attr1 = s2.attr1 group by s2.attr1)
and s.primarykey IN
(SELECT g.primarykey
FROM table2 g
GROUP BY g.primarykey
HAVING avg(g.numattr) > 80)
GROUP BY s.attr1, s.attr2
ORDER BY s.attr2;

Я думаю, что это делает.

0 голосов
/ 25 февраля 2019

Вам нужно переместить MIN в SELECT, чтобы получить результат.Кроме того, вам нужно сгруппировать по attr1 и attr2.Можете ли вы попробовать следующее:

SELECT s.attr1, s.attr2, min(s.attr3)
FROM table1 s
WHERE s.primarykey IN
    (SELECT g.primarykey
    FROM table2 g
    GROUP BY g.primarykey
    HAVING avg(g.numattr) > 80)
GROUP BY s.attr1, s.attr2
ORDER BY s.attr2;
...