oleja1ee7
@oleja1ee7

Почему Where IN выводит только одну строку?

Здравствуйте есть таблица:

5c3b90ffe3ad8446331507.png

к ней написан запрос:
Запрос
SELECT 
    reservtable.sudovlad,
    reservtable.summa,
    reservtable.years,
    ((reservtable2.summa2 - reservtable.summa) / reservtable.summa * 100) AS percent,
    reservtable2.summa2,
    reservtable2.years2
FROM
    (SELECT 
        sudovlad,
            SUM(gruz_pass) AS summa,
            EXTRACT(YEAR FROM data_vih_p_ot) AS years
    FROM
        ships
    WHERE
        sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО')
    GROUP BY EXTRACT(YEAR FROM data_vih_p_ot)) reservtable,
    (SELECT 
        sudovlad,
            SUM(gruz_pass) AS summa2,
            EXTRACT(YEAR FROM data_vih_p_ot) AS years2
    FROM
        ships
    WHERE
        sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО')
    GROUP BY EXTRACT(YEAR FROM data_vih_p_ot)) reservtable2
WHERE
    reservtable.years = 2018
        AND reservtable2.years2 = 2017


Который выдает такой результат:
5c3b927e78cf9692566246.png
Если в запросе сделать такую замену:
WHERE
    reservtable.years = 2018
        OR reservtable2.years2 = 2017

получается такой:
5c3b921fea552574954303.png

Но необходимо, чтобы было всего две строки:
'Русфлот, ООО' 0 2018 0 0 2017
'АрктикТранс ОИЛ, ООО' 0 2018 0 0 2017

в первом название судовладельца
во втором столбце количество всех пассажиров (gruz_pass) за 2018 год
в третьем сам этот год (2018)
в четвертом разница в процентах
в пятом столбце количество всех пассажиров (gruz_pass) за 2017 год
в шестом сам этот год (2017)
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
Я не вижу строки 'Русфлот, ООО' 0 2018 0 0 2017 во втором выводе
Я вижу 'Русфлот, ООО' 0 2017 0 0 2017 во втором выводе

Может поэтому при первом запросе и не возвращает эту строку?

Причина в
GROUP BY EXTRACT(YEAR FROM data_vih_p_ot)
Ты делаешь в первом подзапросе group by по году и он возвращает
Русфлот, ООО 0 2017
АрктикТранс ОИЛ, ООО 0 2018

Есть такой вариант запроса, не знаю подойдет ли
SELECT 
    reservtable.sudovlad,
    reservtable.summa,
    reservtable.years,
    ((reservtable2.summa2 - reservtable.summa) / reservtable.summa * 100) AS percent,
    reservtable2.summa2,
    reservtable2.years2
FROM(
SELECT sudovlad,gruz_pass as summa,EXTRACT(YEAR FROM data_vih_p_ot) AS years
FROM ships
WHERE EXTRACT(YEAR FROM data_vih_p_ot) = 2017 AND sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО')
GROUP BY sudovlad) reservtable,
    (SELECT sudovlad,gruz_pass as summa2,EXTRACT(YEAR FROM data_vih_p_ot) AS years2
FROM ships
WHERE EXTRACT(YEAR FROM data_vih_p_ot) = 2018 AND sudovlad IN ('Русфлот, ООО', 'АрктикТранс ОИЛ, ООО')
GROUP BY sudovlad) reservtable2
GROUP BY sudovlad
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы