원하는 방식으로 쿼리를 가져 오는 데 문제가 있습니다. 나는 2 개의 테이블이 있습니다 : 구절과 질문 테이블
질문 테이블에는 Passage의 외래 키가 있습니다. 질문 테이블에는 활성, 비활성 또는 검토 상태 인 열이 있습니다. 나는 활성 질문의 수를 얻을 수 있었지만 지금은 검토에서 질문의 수를 얻고 싶지만 정확한 것을 얻을 수없는 것 같습니다. 다음은 내가 지금까지 생각 해낸 것입니다. 그러나 questionsinreview 열은 나에게 numquestions와 같은 숫자를 제공합니다.
SELECT
p."id",
COUNT(q."PassageId") as numQuestions,
COUNT(q2."PassageId") AS questionsInReview,
ROUND(AVG(q."level")) as "questionLevel"
FROM
"Passages" as p
LEFT OUTER JOIN "Questions" as q ON p.id=q."PassageId" AND q."status" = 'active'
LEFT OUTER JOIN "Questions" as q2 on p.id=q2."PassageId" where q2."status" = 'review'
GROUP BY p.id
ORDER BY p.id ASC
검토중인 질문 수도 가져올 수 있도록 쿼리를 설정하려면 어떻게해야합니까?
편집하다:
여기에 제안 된 것을 가지고 놀다가 내가 일하게 된 것입니다.
해결책:
SELECT
p.id,
SUM(CASE WHEN q."status" = 'active' THEN 1 ELSE 0 END) AS numQuestions,
SUM(CASE WHEN q."status" = 'review' THEN 1 ELSE 0 END) AS questionsInReview,
ROUND(AVG(CASE WHEN q."status" = 'active' THEN q."level" ELSE Null END)) as questionLevel
FROM "Passages" AS p
LEFT JOIN "Questions" as q ON p.id = q."PassageId"
GROUP BY p.id
ORDER BY p.id ASC
다음과 같은 것은 어떻습니까?
SELECT p.id,
COUNT(q.id) AS numQuestions,
SUM(q.status = "review") AS questionsInReview,
ROUND(AVG(if(q.status = "active", q.level, null)) as questionLevel
FROM Passages AS p
LEFT JOIN Questions as q ON p.id = q.PassageId AND q.status = 'active'
GROUP BY p.id
ORDER BY p.id ASC
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다