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)
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
Delgus
@Delgus
Я не вижу строки 'Русфлот, ООО' 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
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы