这是我的第一个问题。请放轻松!
我在khanacademy做一个sql项目。我的源数据是pokemon数据库的第1-181行(即所有gen1 pokemon),我正在运行一些关于pokemon攻击数据的查询。
跑步 SELECT Type_1, COUNT(*) FROM pokemon WHERE "Attack" > 120 GROUP BY Type_1;
,我一共得到15个口袋妖怪,按9种不同的类型分组,这就是我所期望的。
但是,当我尝试使用having语句来查找至少有一个pokemon受到120次以上攻击的pokemon的类型数时,它只返回4种类型。
代码如下: SELECT Type_1 AS "type" FROM pokemon GROUP BY type_1 HAVING "Attack" > 120;
.
举个例子,我的第二个查询中缺少的pokemon是machamp: INSERT INTO pokemon(Number,Name,Type_1,Type_2,Total,HP,Attack,Defense,Sp_Atk,Sp_Def,Speed,Generation,Legendary) VALUES (68,'Machamp','Fighting',NULL,505,90,130,80,65,85,55,1,'False');
我不确定我的第二个问题出了什么问题。如果可以请帮忙。
2条答案
按热度按时间uwopmtnx1#
此查询:
不是有效的sql,应返回错误。为什么?因为
HAVING
发生在GROUP BY
. 以及Attack
未定义。它需要处于激活功能中,例如:此查询版本在逻辑上等效于:
qco9c6ql2#
我试着
HAVING
声明中找到的pokemon的类型数至少有一个pokemon攻击超过120次如果您想统计有多少类型的pokemon至少有一个pokemon具有120次以上的攻击,那么您可以在现有查询的基础上添加另一个聚合级别,如:
注意,子查询使用
select 1
:我们实际上不需要它返回特定的列,我们只需要知道它包含多少行—因此select 1
,使意图明确。或者,我们可以用
count(distinct)
,这样就不需要子查询: