Postgresql查询:架构不存在

时间:2013-10-23 12:29:04

标签: 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

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

的原因

2 个答案:

答案 0 :(得分:1)

HAVING条款试图做太多。您可以编写子查询来确定正确的MAX值,但执行此操作可能要容易得多:

ORDER BY count(reisnr) DESC LIMIT 1

答案 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
        );