Получение двух столбцов, один из которых содержит, а другой не содержит сгруппированное значение - PullRequest
1 голос
/ 26 сентября 2019

Мои данные выглядят так -

+-----------+-----------+-----------+----------+
| FLIGHT_NO |  FL_DATE  | SERIAL_NO | PILOT_NO |
+-----------+-----------+-----------+----------+
|       501 | 15-OCT-19 |    456710 |      345 |
|       521 | 16-OCT-19 |    562911 |      345 |
|       534 | 17-OCT-19 |    877694 |      345 |
|       577 | 17-OCT-19 |    338157 |      345 |
|       501 | 14-OCT-19 |    921225 |      346 |
|       534 | 15-OCT-19 |    877694 |      346 |
|       534 | 14-OCT-19 |    338157 |      347 |
|       590 | 16-OCT-19 |    650012 |      347 |
|       531 | 14-OCT-19 |    562911 |      348 |
|       531 | 15-OCT-19 |    562911 |      348 |
|       501 | 16-OCT-19 |    220989 |      349 |
|       521 | 18-OCT-19 |    650012 |      349 |
|       590 | 14-OCT-19 |    562911 |      351 |
|       577 | 18-OCT-19 |    877694 |      351 |
|       590 | 18-OCT-19 |    456710 |      346 |
+-----------+-----------+-----------+----------+

Моя цель - вернуть общее количество рейсов, которые летали, а не летали 18 октября 19 года.Я делаю это с двойной, но это, кажется, не правильный / лучший метод.Может кто-нибудь помочь мне сделать это правильно?

SELECT 
(SELECT COUNT(FLIGHT_NO) NO_FLY FROM schd_flight WHERE fl_date = '18-OCT-19') AS FLY, 
(SELECT COUNT(FLIGHT_NO) NO_FLY FROM schd_flight WHERE fl_date  <> '18-OCT-19') AS NO_FLY 
FROM dual; 

Мой вывод -

+-----+--------+
| fly | no_fly |
+-----+--------+
|   3 |     12 |
+-----+--------+

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Я думаю, что второй запрос не нужен, no_fly = total - fly.Так что я придумала свое решение, может улучшить время запроса:

SELECT sub.FLY as FLY, (SELECT count(*) from schd_flight) - sub.FLY as NO_FLY
FROM (
    SELECT COUNT(CASE when fl_date = '18-OCT-19' then 1 end) AS FLY 
    from schd_flight
) sub;

Хотя еще не проверено.

0 голосов
/ 26 сентября 2019

Просто используйте sum с case заявлением

Select 
sum(case when fl_date = '18-OCT-19' then 1 end) fly,
sum(case when fl_date <> '18-OCT-19' then 1 end) no_fly
From schd_flight;

Приветствия !!

...