我的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 :(得分: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
);