为什么我的GROUP BY语句在我的子查询被忽略并给我重复?



我在SAS中使用Proc SQL。

当我在主查询中使用GROUP BY语句时,我得到这个错误:
NOTE: A GROUP BY clause has been discarded because neither the SELECT clause nor the optional HAVING clause of the associated table-expression referenced a summary function.

SELECT
HP.Area
,HP.Name
,HP.NPI
,FACILITIES.ID
,(SELECT COUNT(*) FROM EVAL.CITATIONS C
WHERE C.ID = CITATIONS.ID
) AS Total_Citations
FROM EVAL.HP HP
LEFT JOIN EVAL.FACILITIES FACILITIES
ON FACILITIES.NPI = HP.NPI
LEFT JOIN EVAL.CITATIONS CITATIONS
ON CITATIONS.ID = FACILITIES.ID
GROUP BY CITATIONS.ID

当我运行这个程序时:

  1. 我得到重复的结果
  2. total_references统计引用表中的所有行,因为它忽略了group by语句。
  3. 输出:

1702617026170261702617026
NPITotal_Citations
17026

我建议如下:

proc sql;
SELECT
HP.Area
,HP.Name
,HP.NPI
,HP.ID
,COUNT(*) AS Total_Citations
FROM EVAL.HP
LEFT JOIN EVAL.CITATIONS 
ON CITATIONS.ID = HP.ID
GROUP BY HP.Area, HP.Name, HP.NPI, HP.ID;
quit;

在这里,HP表用于获取区域、名称等,并且该表与references表连接。子查询不是必需的,因为连接已经为您提供了每个ID所需的引用数。如果您希望在结果表中包含Area、Name和ID,那么您也应该在group-by子句中添加这些列。我看不出第三个表的相关性,但是如果你需要FACILITIES表中的列,那么你可以连接这个表和需要的列,但是把这些列也放在group-by中。注意:如果在FACILITIES表中有多个ID条目,那么您将再次得到重复的结果。

相关内容

  • 没有找到相关文章

最新更新