sql - 子查询语句中缺少表达式?
问题描述
我正在使用臭名昭著的“城市监狱”模式来回答一个问题“列出所有犯罪次数超过平均水平且未被列为暴力犯罪者的罪犯的姓名”。
这是我的代码:
SELECT first, last
FROM criminals NATURAL JOIN
crimes
GROUP BY first, last
HAVING COUNT(*) > (SELECT AVG(COUNT(DISTINCT crime_id))
FROM crimes)
AND (SELECT v_status = 'N' FROM crimes)
GROUP BY first, last
);
但我收到一个错误:
ORA-00936:缺少表达式 00936。00000 -“缺少表达式” *原因:
*操作:第 7 行错误:第 22 列
当我将代码更改为:
SELECT first, last
FROM criminals NATURAL JOIN
crimes
GROUP BY first, last
HAVING COUNT(*) > (SELECT AVG(COUNT(DISTINCT crime_id))
FROM crimes)
AND v_status = 'N'
GROUP BY first, last
);
我收到一个错误:
ORA-01787:每个查询块 01787 只允许一个子句。00000 -“每个查询块只允许一个子句” *原因:
*操作:行错误:8 列:1
我究竟做错了什么?
罪犯:
Name Null? Type
----------- -------- ------------
CRIMINAL_ID NOT NULL NUMBER(6)
LAST VARCHAR2(15)
FIRST VARCHAR2(10)
STREET VARCHAR2(30)
CITY VARCHAR2(20)
STATE CHAR(2)
ZIP CHAR(5)
PHONE CHAR(10)
V_STATUS CHAR(1)
P_STATUS CHAR(1)
罪行:
Name Null? Type
--------------- -------- ---------
CRIME_ID NOT NULL NUMBER(9)
CRIMINAL_ID NOT NULL NUMBER(6)
CLASSIFICATION CHAR(1)
DATE_CHARGED DATE
STATUS CHAR(2)
HEARING_DATE DATE
APPEAL_CUT_DATE DATE
DATE_RECORDED DATE
解决方案
在 Have 子句中修复标量子查询
SELECT first
, last
FROM criminals cls
NATURAL
JOIN crimes
WHERE v_status = 'N'
GROUP BY first
, last
HAVING COUNT(1) >(
SELECT AVG(COUNT(DISTINCT crime_id))
FROM crimes
GROUP BY criminal_id);
标量查询在您的两次尝试中均格式错误。
我将条件WHERE v_status = 'N'
移至主查询(您只关心非暴力的罪犯)。
推荐阅读
- office-js - OfficeJS Outlook 邮件正文 getasync 为
标签
- java - 如何从 postgresql 中的存储过程中获取值到 java 应用程序中?我不断收到错误
- python - 如何从 BeautifuleSoup Python 创建的输出 CSV 文件中删除一种数据
- reactjs - 在 ReactJS 应用程序中下载文件,保留原始文件名
- android - Android 和自定义 URL 方案
- python - 斐波那契数列中的数学步骤
- java - 如何将 keycloak 短信验证器 jar 文件添加到 Keycloak?
- c++ - 从 Github 安装 C++ 库时遇到问题
- javascript - 如何将标题、背景和边框作为 svg 外部图像添加到要下载的 d3js 树的克隆元素
- javascript - 如何让 Discord Bot 删除用户命令并将其替换为回复