Вам не нужно использовать having
здесь, это обычно для проверки условий, которые могут быть вычислены только после группировки (например, having count(*) > 2
или аналогичной).
Используйте что-то вроде:
select input,
count(*) as quantity
from dummy
where en = 'Y'
group by input
Причина, по которой вы не можете использовать having en = 'Y'
, состоит в том, что вы уже загрузили все строки и сгруппировали их до того, как сработает предложение having
in. Другими словами, у вас больше нет информации о столбце en
, , она была потеряна в агрегации.
См. стенограмму ниже:
> DROP TABLE DUMMY%
> CREATE TABLE DUMMY (OUTPUT CHAR(2), OQTY INTEGER,
>> INPUT CHAR(1), IQTY INTEGER, EN CHAR(2), FLEX INTEGER)%
> INSERT INTO DUMMY (OUTPUT, OQTY, INPUT, IQTY, EN, FLEX) VALUES
>> ('Y3',1,'X',2,'Y',0), ('Y4',1,'X',2,'Y',0), ('Y5',1,'X',2,'N',0),
>> ('Y6',1,'X',2,'N',0), ('Y1',1,'X',2,'Y',0), ('Y2',1,'X',2,'Y',0)%
> SELECT * FROM DUMMY ORDER BY EN, INPUT, OUTPUT%
OUTPUT OQTY INPUT IQTY EN FLEX
------ ---- ----- ---- -- ----
Y5 1 X 2 N 0
Y6 1 X 2 N 0
Y1 1 X 2 Y 0
Y2 1 X 2 Y 0
Y3 1 X 2 Y 0
Y4 1 X 2 Y 0
> SELECT INPUT, COUNT(*) AS QUANT
>> FROM DUMMY
>> WHERE EN = 'Y'
>> GROUP BY INPUT%
INPUT QUANT
----- -----
X 4
И, обновляя одну из соответствующих строк:
> UPDATE DUMMY SET INPUT = 'Z' WHERE OUTPUT = 'Y1'%
> SELECT * FROM DUMMY ORDER BY EN, INPUT, OUTPUT%
OUTPUT OQTY INPUT IQTY EN FLEX
------ ---- ----- ---- -- ----
Y5 1 X 2 N 0
Y6 1 X 2 N 0
Y2 1 X 2 Y 0
Y3 1 X 2 Y 0
Y4 1 X 2 Y 0
Y1 1 Z 2 Y 0
> SELECT INPUT, COUNT(*) AS QUANT
>> FROM DUMMY
>> WHERE EN = 'Y'
>> GROUP BY INPUT%
INPUT QUANT
----- -----
X 3
Z 1