получить ошибку при использовании предложения и группировки по выражению в оракуле - PullRequest
0 голосов
/ 08 июля 2011

h Это моя таблица-пустышка:

OUTPUT  OQTY    INPUT   IQTY    EN      FLEX
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 INPUT,count(*)
FROM dummy
GROUP BY INPUT
HAVING EN = 'Y';

Я получаю сообщение об ошибке, а не выражение group by.хочу подсчет аналогичных входов с en = Y.

Что я здесь не так делаю?

Ответы [ 2 ]

5 голосов
/ 08 июля 2011

Вам не нужно использовать having здесь, это обычно для проверки условий, которые могут быть вычислены только после группировки (например, having count(*) > 2 или аналогичной).

Используйте что-то вроде:

select    input,
          count(*) as quantity
from      dummy
where     en = 'Y'
group by  input

Причина, по которой вы не можете использовать having en = 'Y', состоит в том, что вы уже загрузили все строки и сгруппировали их до того, как сработает предложение havingin. Другими словами, у вас больше нет информации о столбце 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
0 голосов
/ 08 июля 2011

Вместо Count (*) определите имя столбца, который будет подсчитан.

проверьте ниже

SELECT INPUT,count(EN) As TotalEnCount
FROM [dummy]
where EN = 'Y'
GROUP BY INPUT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...