너무 많은 시간 동안이 머리글을 감쌀 수없는 SQL 쿼리를 구성하려고합니다.연결 제한이있는 테이블을 선택하는 쿼리 만들기
다음과 같은 관계로 3 개의 테이블이 있습니다. 나머지 열은 간단하게 제거했습니다.
- Jobs
id
- Company
id
- Offer
job_id
company_id
offer_type (either 'single' or 'voucher')
- Reservation
job_id
company_id
컨텍스트.
사용자가 작업을 만듭니다. 회사는 직업에 대해 하나 또는 두 개의 오퍼 (각 유형 중 하나)를 만들 수 있으며, 직업은 3 개의 다른 회사에서 오퍼를 얻으면 종료됩니다. 또한 예약은 관광 명소 중 하나를 차지할 수 있습니다.
그래서 회사에 대한 모든 공개 작업을 가져 오려고합니다. 그것은 2 개의 다른 회사에게서 제안을받은 모든 일이다.
언급했듯이 내가 지금까지 가지고있는 쿼리를 생각해 냈습니다.
;WITH company_offers AS
(
SELECT
DISTINCT ON(offers.company_id) offers.company_id,
count(offers.company_id) as total,
offers.job_id
FROM offers
GROUP BY offers.company_id, offers.job_id
),
counts AS
(
SELECT jobs.*,
(SELECT count(*) FROM company_offers) as offer_count,
(SELECT count(*) FROM reservations WHERE reservations.job_id = jobs.id) as reservation_count
FROM jobs
JOIN company_offers ON company_offers.job_id = jobs.id
GROUP BY jobs.id
)
SELECT offer_count+reservation_count as total
FROM counts
첫 번째 CTE에서 고유 한 회사 ID로 쿠폰을 가져 오려고했습니다. 그런 다음 두 번째 CTE를 사용하여 첫 번째 결과를 계산하고 예약을 찾습니다. 그런 다음 마침내 함께 추가하고 마지막으로 합계가 3보다 작은 조건을 만들어야합니다. 그러나 예상 된 결과가 실제로는 오랫동안 반환되지 않습니다.
나는 누군가가 나를 도울 수 있고, 또한 설명 할 수 있으면 감사 할 것이다.
질문이 있으면 알려주세요.
가상 포옹을 보내드립니다! 정말 고맙습니다! – MartinElvar
다행히 도울 수 있어요 :) – JimmyB