【发布时间】:2021-03-30 20:35:16
【问题描述】:
我正在尝试计算每所学校出现在一组记录中的次数,并将该值记录在具有相应学校名称和 ID 的新表中。
使用的表类似于以下内容: 表 1-> school_probs
| school_code (pk, bigint) | school (text) | probability |
|---|---|---|
| 1 | school1 | Irrelevant info |
| 2 | school2 | ii |
| 3 | school3 | ii |
Table2-> 模拟记录
| record_id (pk, bigint) | school (text) | grade |
|---|---|---|
| 1 | school1 | ii |
| 2 | school2 | ii |
| 3 | school1 | ii |
| 4 | school3 | ii |
我希望得到类似的输出
| school_code (fk, bigint) | school (text) | schoolCount (integer) |
|---|---|---|
| 1 | school1 | 2 |
| 2 | school2 | 1 |
| 3 | school3 | 1 |
我可以通过以下代码实现这一点:
SELECT COUNT (simulated_records.school) AS schoolCount, school_probs.school_code, school_probs.school
FROM simulated_records, school_probs WHERE school_probs.school = simulated_records.school
GROUP BY simulated_records.school, school_probs.school_code, school_probs.school;
但是,我需要将结果保存在表格中。但是当我尝试
CREATE TABLE studentCount (
studentNum integer, school_code bigint, school text,
CONSTRAINT fk_sC FOREIGN KEY (school_code) REFERNCES school_probs (school_code)
)
SELECT COUNT (simulated_records.school) AS schoolCount, school_probs.school_code, school_probs.school
FROM simulated_records, school_probs WHERE school_probs.school = simulated_records.school
GROUP BY simulated_records.school, school_probs.school_code, school_probs.school;
我收到“错误:在“SELECT”第 5 行或附近出现语法错误:SELECT COUNT (simulated_records.school) AS schoolCount, . . . SQL state: 42601"
第 5 行内容如下:
SELECT COUNT (simulated_records.school) AS schoolCount, school_probs.school_code, school_probs.school
谁能指出我正确的方向?我计划以此创建一个函数。
创建表格的代码:
DROP TABLE IF EXISTS school_probs;
CREATE TABLE school_probs
(
school_code bigint NOT NULL PRIMARY KEY,
school text NOT NULL,
probs numeric[] NOT NULL
);
INSERT INTO school_probs VALUES
(1,'school1','{0.05,0.08,0.18,0.3,0.11,0.28}'),
(2,'school2','{0.06,0.1,0.295,0.36,0.12,0.065}'),
(3,'school3','{0.05,0.11,0.35,0.32,0.12,0.05}');
DROP TABLE IF EXISTS simulated_records;
CREATE TABLE simulated_records
(
record_id bigint NOT NULL PRIMARY KEY,
school text NOT NULL,
grade text NOT NULL
);
INSERT INTO simulated_records VALUES
(1,'school1','-'),
(2,'school2','-'),
(3,'school1','-'),
(4, 'school3', '-');
【问题讨论】:
-
请不要发布代码图片的链接。这使得有人很难尝试。请编辑问题并将表格定义显示为文本。 5 号线在哪里?
-
PL/SQL 是 Oracle 的过程语言扩展。它与 Postgres 的 SQL 方言 无关。
标签: sql