sql - 有 Statement 和 Where 语句对 Pokemon 数据产生不一致的结果
问题描述
这是我的第一个问题。请放轻松!
我正在KhanAcademy 做一个 SQL 项目。我的源数据是这个pokemon 数据库的第 1-181 行(即所有 gen 1 pokemon),我正在运行一些关于 pokemon 攻击统计的查询。
运行SELECT Type_1, COUNT(*) FROM pokemon WHERE "Attack" > 120 GROUP BY Type_1;
,我得到了 15 个按 9 种不同类型分组的 Pokemon,这是我所期望的。
但是,当我尝试使用 HAVING 语句查找具有至少一个攻击力超过 120 的口袋妖怪的口袋妖怪类型数量时,它只返回 4 种类型。
这是代码:SELECT Type_1 AS "type" FROM pokemon GROUP BY type_1 HAVING "Attack" > 120;
。
举个例子,我的第二个查询中缺少的一个口袋妖怪是 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');
我不确定我的第二个查询出了什么问题。如果可以的话请帮忙。
解决方案
这个查询:
SELECT Type_1 AS "type"
FROM pokemon
GROUP BY type_1
HAVING "Attack" > 120;
不是有效的 SQL,应该返回错误。为什么?因为HAVING
发生在之后GROUP BY
。并且Attack
没有定义。它需要在一个激活函数中,例如:
HAVING MAX(Attack) > 120
此版本的查询在逻辑上等价于:
SELECT p.type
FROM (SELECT Type_1 AS "type", MAX(Attack) as max_attack
FROM pokemon
GROUP BY type_1
) p
WHERE max_Attack > 120
推荐阅读
- jquery - jQuery - 隐藏/显示相关 div 是否有文本
- node.js - 带有 TypeScript 3 和 MongoDB 的 Node.js Express API 给了我一些逻辑错误
- while-loop - 如何优化查询以使用 SQL ServerV2014 创建具有动态查询的多表
- bash - 如何用与字符串匹配的数字替换所有出现的字符串模式,这取决于找到字符串的顺序
- data-modeling - 多粒度数据的表设计
- c# - 这个 C# 代码在算法中做了什么?
- reactjs - 即使 React.memo 返回 true,子组件也会在父组件时重新渲染
- python - keras 分割 InvalidArgumentError:不兼容的形状:[32,256,256,3] 与 [32,256,256,4]
- python - 将 matplotlib 等高线导出到文本文件
- c# - c# CATIA 创建产品和零件