交互实验区 · 观察实际结果
表结构、合成数据与清理规则
CREATE TABLE centres (
centre_id TEXT PRIMARY KEY,
centre_name TEXT NOT NULL,
capacity INTEGER CHECK (capacity >= 0)
);
CREATE TABLE enrolments_raw (
source_row INTEGER PRIMARY KEY,
record_id TEXT NOT NULL,
centre_id TEXT NOT NULL,
week TEXT NOT NULL,
enrolled INTEGER NOT NULL,
attended INTEGER
);
INSERT INTO centres VALUES
('C01','Demo Centre A',24),('C02','Demo Centre B',20),
('C03','Demo Centre C',18),('C04','Demo Centre D',NULL);
INSERT INTO enrolments_raw VALUES
(1,'E01','C01','W1',20,18),(2,'E02','C02','W1',15,NULL),
(3,'E03','C03','W1',12,0),(4,'E04','C99','W1',8,6),
(5,'E05','C01','W2',21,19),(6,'E05','C01','W2',21,19),
(7,'E06','C02','W2',16,14),(8,'E07','C04','W1',9,8);
-- Keep staging records intact. Inspect repeats before choosing a policy.
CREATE VIEW enrolments_clean AS
SELECT source_row,record_id,centre_id,week,enrolled,attended
FROM (SELECT *, ROW_NUMBER() OVER
(PARTITION BY record_id ORDER BY source_row) AS occurrence
FROM enrolments_raw) ranked
WHERE occurrence = 1;
通过 PGlite,在浏览器独立线程的内存中运行真正的 PostgreSQL。首次使用加载约 15 MB。查询事务只读,重置会丢弃临时数据库,不涉及后端或数据上传。
按需加载 Python、pandas 和 NumPy,总计约 22 MB。这里会实际执行 Python 与六项样例核对。编辑只临时保留,刷新前请下载保存。