2013-10-23 25 views
2

我的PostgreSQL查询存在问题。我是一个初学者,所以也许这是一个愚蠢的问题:Postgresql查询:架构不存在

我需要找到一直是最月亮的客户端。 我试图用子查询找到解决方案,但我无法修复错误。 这里是我的查询:

SELECT klantnr,count(reisnr) as aantal 
FROM (SELECT reisnr,klantnr,objectnaam 
     FROM Hemelobjecten H INNER JOIN bezoeken b 
     USING(objectnaam) 
     INNER JOIN deelnames D 
     USING(reisnr) 
WHERE H.objectnaam = 'Moon') as Query 
    WHERE Query.objectnaam = 'Moon' 
    GROUP BY klantnr 
    HAVING count(reisnr) = MAX(Query.count(reisnr)) 

这给我的错误: 错误:架构 “查询” 不存在

*** 错误 ** *

错误:模式“查询”不存在 SQL状态:3F000

我该如何解决?

查询:

SELECT klantnr,count(klantnr) 
     FROM Hemelobjecten H INNER JOIN bezoeken b 
     USING(objectnaam) 
     INNER JOIN deelnames D 
     USING(reisnr) 
     WHERE H.objectnaam = 'Moon' 
GROUP BY klantnr 

给我:

125;1 
122;1 
124;3 
121;4 
123;3 
126;1 

我只需要在右列中的最高值的行。 这就是我使用的原因

+0

'MAX( Query.count(reisnr))'是无稽之谈,解析器认为'Query'是一个模式名称。 – wildplasser

回答

1

HAVING条款试图做太多。你可以写一个子查询,以确定正确的MAX值,但它可能是相当容易做到这一点:

ORDER BY count(reisnr) DESC LIMIT 1 
0

恕我直言,你不需要reisnr计数前往月球的数量。 (每个发现的记录构成不同的旅程)。下面的代码是(相当笨重,但可读性很强)CTE来旅行的总成绩计算到月球每人并在最终的查询对比,避免了HAVING条款:

WITH dinges AS (
     SELECT distinct klantnr 
       , count(*) as aantal 
     FROM Hemelobjecten H 
     INNER JOIN bezoeken b USING(objectnaam) 
     INNER JOIN deelnames D USING(reisnr) 
     WHERE H.objectnaam = 'Moon' 
     GROUP BY klantnr 
     ) 
SELECT klantnr 
FROM dinges a 
WHERE NOT EXISTS (
     SELECT * 
     FROM dinges nx 
     WHERE nx.aantal > a.aantal 
     ); 
+0

我可以解决它没有“与”,老师告诉我,我只能用一个HAVING解决它。我尝试了很多,但现在它只给我那些aantal = 1这里是我使用的代码:SELECT klantnr作为K1,计数(Q1.aantal)作为K2 FROM(SELECT D.klantnr,count(D.reisnr)as aantal \t FROM deelnames d INNER JOIN REIZENř \t \t USING(reisnr) \t INNER JOIN bezoeken b \t \t USING(reisnr) \t WHERE B.objectnaam = '马安' \t GROUP BY D.klantnr)作为Q1 GROUP BY klantnr HAVING count(aantal)=(SELECT MAX(Q1.aantal)); – user2810895

+0

由于Q1引用了一个子查询,我_think_会起作用,但也许你不需要RHS上的SELECT:'...... HAVING count(aantal)= MAX(Q1.aantal)'。你为什么不尝试? (我会尝试如果我有表定义,但我懒得为你发明它们)BTW:WINDOW函数也是可能的。 – wildplasser