-1

我正在尝试恢复发生次要事件的合同数量超过表中指定的数量。为此,我有两张表,一张表存储了合同数据和hired_frequency,另一张表显示了合同发生的次数。在这种情况下,我无法创建一个返回所有行的 SQL(在 Postgres 中),这些行没有出现,并且其中发生了hired_frequency 描述的次要事件。

表 1 - 合同

ID  | hired_frequency
527 | 1
528 | 3
526 | 5
555 | 1
413 | 3 -- not show this
500 | 1 -- not show this

表 2 - 出现次数

itinerary_fixed_id | contract_id
2443 | 527
2443 | 528
123  | 526
123  |555

我的选择(不工作)

SELECT
    * 
FROM
    contracts 
WHERE
    hired_frequency > (
    SELECT COUNT
        ( * ) 
    FROM
        occurrences 
    WHERE
        contracts.ID = occurrences.contract_id 
    GROUP BY
    contract_id 
)

我创建了一个小提琴来测试...... http://sqlfiddle.com/#!17/95cd2/1/0

4

2 回答 2

0

当您加入contracts.ID =occurrences.contract_id 和group by 时,它将聚合并仅获得1 作为值,因为没有重复。你需要的只是内部连接

SELECT
    * 
FROM
    contracts 
WHERE
    hired_frequency > (
    SELECT COUNT
        ( * ) 
    FROM
        occurrences 
    WHERE
        contracts.ID = occurrences.contract_id 

    )
于 2021-10-24T02:25:06.947 回答
0

试试这个

SELECT * 
FROM contracts a
WHERE ID NOT IN      ( SELECT b.contract_id 
                       FROM occurrences b )
OR hired_frequency > ( SELECT COUNT(c.contract_id) 
                       FROM occurrences c
                       WHERE a.ID = c.contract_id
                       GROUP BY c.contract_id);
于 2021-10-24T08:39:42.380 回答