这是我到目前为止所尝试的
SELECT DISTINCT
RECORDS.TOTAL_COST, DISEASE.DISEASE_ID
FROM
RECORDS, DISEASE
WHERE
DISEASE.DISEASE_ID = RECORDS.DISEASE_ID
AND TREATMENT.TREATMENT_ID = RECORDS.TREATMENT_ID
GROUP BY
DISEASE.DISEASE_NAME
这是所提供数据的星型模式
Treatment
表
CREATE TABLE treatment
(
treatment_id NUMBER(6),
treatment_type VARCHAR2(30),
private_cost NUMBER(8,2),
public_cost NUMBER(8,2),
description VARCHAR
)
创建记录事实表
CREATE TABLE records
(
patient_id NUMBER(6),
doctor_id NUMBER(6),
disease_id NUMBER(6),
treatment_id NUMBER(6),
time_id DATE,
side_effects NUMBER(1),
effectivness NUMBER(1),
total_cost NUMBER(8,2)
);
为所有维度表创建外键
ALTER TABLE records
ADD ( CONSTRAINT records_patients_fk FOREIGN KEY (patient_id) REFERENCES patients,
CONSTRAINT records_doctors_fk FOREIGN KEY (doctor_id) REFERENCES doctors,
CONSTRAINT records_disease_fk FOREIGN KEY (disease_id) REFERENCES disease,
CONSTRAINT records_treatment_fk FOREIGN KEY (treatment_id) REFERENCES treatment,
CONSTRAINT records_times_fk FOREIGN KEY (time_id) REFERENCES times);
CREATE TABLE disease
(
disease_id NUMBER(6),
disease_name VARCHAR2(30)
);
答案 0 :(得分:0)
假设第一个查询中返回的数据大部分是正确的,除了只想要前N个项:
SELECT TOTAL_COST, DISEASE_ID
FROM
(
SELECT DISTINCT RECORDS.TOTAL_COST, DISEASE.DISEASE_ID
FROM RECORDS, DISEASE
WHERE DISEASE.DISEASE_ID=RECORDS.DISEASE_ID AND
TREATMENT.TREATMENT_ID=RECORDS.TREATMENT_ID
GROUP BY DISEASE.DISEASE_NAME
ORDER BY RECORDS.TOTAL_COST DESC
)
WHERE ROWNUM <= 5; -- replace 5 with however many you want.