2014-02-17 3 views
1

Я хотел бы получить некоторую помощь в моем запросе ... я хочу сделать, если конкретные atic и oaic пусто в таблице ... interview_sum или other_sum к этому конкретному aticoaic должен быть пустой тоже .... может ли кто-нибудь знать, как это сделать?фильтрация и ограничение в запросе

картина токового выхода: enter image description here

текущий запрос: мой запрос по-прежнему дает номера для other_sum или interview_sum даже его пустым.

SELECT DISTINCT 
IF(t.inttotal=NULL,0,(SELECT SUM(t2.inttotal) 
FROM app_interview2 AS t2 
WHERE t2.atic = t.atic AND t2.inttotal>0)/7) 
AS interview_sum, 

IF(o.ototal=NULL,0,(SELECT SUM(o2.ototal) 
FROM other_app2 AS o2 
WHERE o2.oaic = o.oaic AND o2.ototal>0)/7) 
AS other_sum, 

atid, 
atic, 
atname, 
region, 
town, 
uniq_id, 
position, 
salary_grade, 
salary 
FROM app_interview2 AS t, other_app2 AS o 
GROUP BY t.atname HAVING COUNT(DISTINCT t.atic) 

ответ

1

Я сделал несколько предположений:

  • Вы, наверное, есть таблица, в которой app_interview2.atic и other_app2.oaic являются иностранными ключами, но так как вы не разделяли, я вывел таблицу в предложении FROM.
  • Это предполагает, что atname всегда одинаково для atid.
  • Вы также делите на 7, что я предполагаю, чтобы получить среднее значение, поэтому я использовал функцию AVG.

Решение ---

SELECT t1.id AS atid 
     ,interview.atname AS atname 
     ,COALESCE(interview.interviewsum, 0) AS interviewsum 
     ,COALESCE(interview.interviewavg,0) AS interviewavg 
     ,COALESCE(other.othersum, 0) AS othersum 
     ,COALESCE(other.otheravg) AS otheravg 
FROM (SELECT DISTINCT atid AS id 
     FROM app_interview2 
     UNION 
     SELECT DISTINCT oaic 
     FROM other_app2) AS t1 
LEFT JOIN (SELECT atid, atname, SUM(inttotal) AS interviewsum, AVG(inttotal) AS interviewavg 
      FROM app_interview2 
      GROUP BY atid, atname) as interview 
    ON interview.atid = t1.id 
LEFT JOIN (SELECT oaic, SUM(ototal) AS othersum, AVG(ototal) AS otheravg 
      FROM other_app2 
      GROUP BY oaic) AS other 
    ON other.oaic = t1.id; 

- Если это дает результаты вашей которые надеялись, я бы заменить производную таблицу t1 в предложении FROM с таблицы, первичный ключ I описанные выше И, вероятно, имеют эти столбцы (например, регион, город и т. д.), которые я не включил

Смежные вопросы