SQL,oracle中的内部连接问题
^医院专科检查^ ^医院^ 这是我的两张桌子。我正在尝试使用内部联接生成结果,这是我当前使用的查询:SQL,oracle中的内部连接问题,sql,oracle,Sql,Oracle,^医院专科检查^ ^医院^ 这是我的两张桌子。我正在尝试使用内部联接生成结果,这是我当前使用的查询: SELECT HOSPITAL_ID, COUNT(DISTINCT SPECIALISE) AS SPECIALISE FROM HOSPITAL_SPECIALISE_TEST GROUP BY HOSPITAL_ID; 我得到下面的结果 现在的问题是,我想连接两个表并显示医院名称,但它无法生成,我不知道为什么。。。 我的问题是: SELECT HS.HOSPITAL_ID, HP.N
SELECT HOSPITAL_ID, COUNT(DISTINCT SPECIALISE) AS SPECIALISE FROM HOSPITAL_SPECIALISE_TEST GROUP BY HOSPITAL_ID;
我得到下面的结果
现在的问题是,我想连接两个表并显示医院名称,但它无法生成,我不知道为什么。。。
我的问题是:
SELECT HS.HOSPITAL_ID, HP.NAME, COUNT(DISTINCT HS.SPECIALISE) AS SPECIALISE
FROM HOSPITAL_SPECIALISE_TEST HS
INNER JOIN HOSPITAL HP
on HS.HOSPITAL_ID = HP.HOSPITAL_ID
GROUP BY HOSPITAL_ID;
改为这样做
SELECT HP.NAME, spec.hospital_id, spec.specialise
FROM ( SELECT HOSPITAL_ID, COUNT (DISTINCT SPECIALISE) AS SPECIALISE
FROM HOSPITAL_SPECIALISE_TEST
GROUP BY HOSPITAL_ID) spec
INNER JOIN HOSPITAL HP ON spec.HOSPITAL_ID = HP.HOSPITAL_ID
改为这样做
SELECT HP.NAME, spec.hospital_id, spec.specialise
FROM ( SELECT HOSPITAL_ID, COUNT (DISTINCT SPECIALISE) AS SPECIALISE
FROM HOSPITAL_SPECIALISE_TEST
GROUP BY HOSPITAL_ID) spec
INNER JOIN HOSPITAL HP ON spec.HOSPITAL_ID = HP.HOSPITAL_ID
分组依据必须包含所有选择列(聚合除外):
分组依据HS.HOSPITAL\u ID,HP.NAME.分组依据必须包含所有选择列(聚合除外):
分组依据HS.HOSPITAL\u ID,HP.NAME。虽然医院名称可以从您分组依据的医院ID中明确得出,但Oracle要求它也包括在GROUP BY子句中,或者进行聚合。这导致了一个相当笨拙的查询:
select hs.hospital_id, hp.name, count(distinct hs.specialise) as specialise
from hospital_specialise_test hs
inner join hospital hp on hs.hospital_id = hp.hospital_id
group by hs.hospital_id, hp.name;
或
这符合旧的SQL 92标准,但不符合SQL标准的较新版本,后者很乐意接受您的查询:-)
您可以通过不加入表来避免此问题:
select
hs.hospital_id,
(select name from hospital hp where hs.hospital_id = hp.hospital_id) as name,
count(distinct hs.specialise) as specialise
from hospital_specialise_test hs
group by hospital_id, hp.name;
或者按照cableload的建议,加入预聚合记录。尽管医院名称可以从您分组依据的医院ID中明确得出,但Oracle要求将其也包括在GROUP by子句中,或者进行聚合。这导致了一个相当笨拙的查询:
select hs.hospital_id, hp.name, count(distinct hs.specialise) as specialise
from hospital_specialise_test hs
inner join hospital hp on hs.hospital_id = hp.hospital_id
group by hs.hospital_id, hp.name;
或
这符合旧的SQL 92标准,但不符合SQL标准的较新版本,后者很乐意接受您的查询:-)
您可以通过不加入表来避免此问题:
select
hs.hospital_id,
(select name from hospital hp where hs.hospital_id = hp.hospital_id) as name,
count(distinct hs.specialise) as specialise
from hospital_specialise_test hs
group by hospital_id, hp.name;
或者,按照cableload的建议,加入预聚合记录。“但它无法生成”是对正在发生的事情的一种弱描述。您应该告诉我们Oracle错误(“ORA-00979不是表达式分组”)。“但它无法生成”是对正在发生的事情的一个弱描述。您应该告诉我们Oracle错误(“ORA-00979不是GROUP BY表达式”)。