2

我的 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

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

4

2 回答 2

1

HAVING条款试图做的太多了。您可以编写一个子查询来确定正确的 MAX 值,但这样做可能会容易得多:

ORDER BY count(reisnr) DESC LIMIT 1
于 2013-10-23T12:39:40.857 回答
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
        );
于 2013-10-23T12:48:48.090 回答