我有一个包含如下数据的表:
create table demo_patient_info (
attend timestamp,
patient_id int,
blood_pressure double
);
我想编写(最好是ANSI)SQL查询,允许我执行以下操作:
返回所有患者的bp之间的差异(使用WHERE子句限制笛卡尔积中返回的行数)
返回每位患者的bp与表中一位特定(即指定)患者之间的差异
答案 0 :(得分:5)
1)
SELECT
t1.patient_id
,t2.patient_id
,t1.blood_pressure - t2.blood_pressure as bp_diff
FROM
demo_patient_info t1
CROSS JOIN
demo_patient_info t2
WHERE
t1.patient_id < t2.patient_id
2)
SELECT
t1.patient_id
,t2.patient_id
,t1.blood_pressure - t2.blood_pressure as bp_diff
FROM
demo_patient_info t1
CROSS JOIN
demo_patient_info t2
WHERE
t2.patient_id = 1
虽然这可能会为每场比赛提供两行,这可能是也可能不是
编辑:查询1中的WHERE t1.patient_id < t2.patient_id
是为了防止以下,重复和自我匹配
ID1 ID2 diff
1 2 1.4
2 1 1.4
1 1 0
感谢Jonathan Leffler提示:)