【问题标题】:Getting two columns one containing and one not containing a grouped value获取两列,一列包含分组值,另一列不包含分组值
【发布时间】:2019-09-26 01:01:31
【问题描述】:

我的数据看起来像这样 -

+-----------+-----------+-----------+----------+
| 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 |
+-----------+-----------+-----------+----------+

我的目标是返回 19 年 10 月 18 日飞行和未飞行的航班总数。 我正在使用双重方法,但这似乎不是正确/最好的方法。 谁能帮我以正确的方式做到这一点?

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 |
+-----+--------+

【问题讨论】:

    标签: sql oracle multiple-columns


    【解决方案1】:

    只需将sumcase 语句一起使用

    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;
    

    干杯!!

    【讨论】:

      【解决方案2】:

      我认为第二个查询没有必要,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;
      

      尚未测试。

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 2016-06-02
        • 2020-01-02
        • 2021-08-21
        • 2021-10-24
        相关资源
        最近更新 更多