2011-07-08 25 views
0

hHis是我的表虛:Oracle中使用具有和group by子句收到錯誤

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'; 

我通過聲明得到一個錯誤不是一組。

我想類似的輸入,EN =計數Y.

什麼我錯在這裏做什麼?

回答

5

你不需要在這裏使用having,它通常用於檢查只能分組完成後計算條件(如having count(*) > 2或類似)。

使用類似:

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

的原因,你不能使用having en = 'Y'是因爲你已經加載了所有的行,並在having條款踢分組之前他們換句話說,你不再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

沒有它會給輸出X 1 但所需的一個是X 4 – Navin

+0

@navin:你試試? pax的解決方案對我來說是正確的。 – Mat

+0

@Navin,不會,它會給'X 4' - 看到更新。 – paxdiablo

0

不是COUNT(*),定義哪些得到列名的要算。

檢查以下

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