7 개의 결과 열이있는 많은 LEFT JOIN 절이있는 다음 쿼리가 있습니다. 마지막 두 개는 숫자입니다. 나는SQL LEFT JOIN 0이 아닌 값을 0으로 찾음
WITH temp_table AS (
SELECT
attr.company_name_id AS option_id,
attr.company_name AS option_name,
uj.internship_company_name_id,
AVG(CASE WHEN s.salary > 0 THEN s.salary END) AS average,
COUNT(CASE WHEN s.salary > 0 THEN attr.company_name END) as count_non_zero,
COUNT(attr.company_name_id) as count_total
FROM company_name attr
LEFT JOIN user_job_internship uj ON uj.internship_company_name_id = attr.company_name_id
AND attr.approved_by_administrator = 1
LEFT JOIN salary_internship s ON uj.user_job_internship_id = s.user_job_id
AND uj.job_type_id = 4
LEFT JOIN [user] u ON u.user_id = uj.user_id AND u.include_in_student_site_results = 1
AND u.site_instance_id IN (1)
LEFT JOIN user_education_mba_school mba ON u.user_id = mba.user_id
AND mba.mba_graduation_year_id NOT IN (8)
GROUP BY attr.company_name_id, attr.company_name, uj.internship_company_name_id)
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY average DESC) AS row, *
FROM temp_table WHERE count_total >= 3) sub
WHERE row >= 1 AND row <= 25 ORDER BY average DESC;
내가 '급여'열에서 모든 값의 값을 반환하지 않습니다 것을 증명하기 위해이 쿼리를 실행 (데이터 I 전류가 한 부여) 항상 count_total 열 같도록 count_non_zero 열을 기대하고 있습니다 0
SELECT s.* FROM user_job_internship uj, salary_internship s
where internship_company_name_id = 440
AND uj.user_job_internship_id = s.user_job_id
나는 존재하지 않는 수를 얻을 수있는 count_non_zero의 원인이되는 결과를 망쳐 놨 뭔가가 생각하고 있어요. 누구든지 의견이 있으십니까?
질문에 불분명합니다. count_non_zero가 NULL이나 count_total 또는 완전히 다른 값으로 돌아오고 있다고 말하는 것입니까? – ongle
예를 들어, count_non_zero가 3 일 때 1로 되돌아 오는 시나리오가 있다고 말하고 있습니다. 제로의 값이 없으므로 현재 데이터 세트가 주어 지므로 두 열 모두 각 행에서 동일한 값을 가져야합니다. ...하지만 일단 제로 급여 값을 추가하기 시작하면 제대로 작동해야합니다. –
문제를 나타내는 샘플 데이터를 제공하고 예상 결과를 나타내십시오. . 제를 줄이기 위해 필요한 열 W 조인의 수를 줄이는 것이 도움이 될 수 있습니다. 나는 많은 사람들이 "시나리오가있다"라는 것이 쿼리를 리버스 엔지니어링함으로써 단순히 의미 할 수도있는 것을 파악하도록 동기를 부여 받았다고 생각하지 않는다. http://dba.blogoverflow.com/2012/06/help-us-help-you/ –