hHis是我的桌子假人:
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来计算类似的输入。
我在这里做错了什么?
答案 0 :(得分:5)
您不需要在这里使用 使用类似: 无法使用 见下面的成绩单: 并且,更新其中一个相关行:having
,通常用于检查只能在分组完成后计算的条件(如having count(*) > 2
或类似内容)。< / p>
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
答案 1 :(得分:0)
而不是Count(*),定义要计算的列名。
检查以下
SELECT INPUT,count(EN) As TotalEnCount FROM [dummy] where EN = 'Y' GROUP BY INPUT