3

理解查询别名在 postgresql 中的工作方式有点麻烦。我有以下内容:

SELECT DISTINCT robber.robberid,
                nickname,
                Count(accomplices.robberid) AS count1
FROM   robber
       INNER JOIN accomplices
               ON accomplices.robberid = robber.robberid
GROUP  BY robber.robberid,
          robber.nickname
ORDER  BY Count(accomplices.robberid) DESC;


 robberid |            nickname            | count1 
----------+--------------------------------+--------
       14 | Boo Boo Hoff                   |      7
       15 | King Solomon                   |      7
       16 | Bugsy Siegel                   |      7
       23 | Sonny Genovese                 |      6
        1 | Al Capone                      |      5
 ...

我可以使用 as 命令重命名“count1”列,但我似乎无法在查询中再次引用它?我试图在此查询的末尾包含一个 HAVING 命令,以仅查询计数小于最大值一半的对象。

这是家庭作业,但我不是在要求答案,只是一个指向如何将 count1 列包含在另一个子句中的指针。

任何人都可以帮忙吗?

4

1 回答 1

6

一般情况下,后面的查询不能引用聚合列的别名,必须重复聚合

如果您真的想使用它的名称,可以将查询包装为子查询

SELECT * 
FROM
(
    SELECT DISTINCT robber.robberid, nickname, count(accomplices.robberid)  
    AS count1 FROM robber                   
    INNER JOIN accomplices  
    ON accomplices.robberid = robber.robberid  
    GROUP BY robber.robberid, robber.nickname  
) v
ORDER BY count1 desc
于 2012-08-20T09:05:06.230 回答