sql >> データベース >  >> RDS >> Oracle

sql-ORA-00937:単一グループのグループ関数ではありません

    grouping setsをお勧めします :

    select coalesce(location, 'Total') as location,
           coalesce(home_team_name, 'Total') as home_team_name,
           sum(case when match_date >= date '2018-01-01' and 
                         match_date < date '2018-02-01'
                    then 1 else 0
               end) as january_2018,
           sum(case when match_date >= date '2018-02-01' and 
                         match_date < date '2018-03-01'
                    then 1 else 0
               end) as february_2018,
           sum(case when match_date >= date '2018-03-01' and 
                         match_date < date '2018-04-01'
                    then 1 else 0
               end) as march_2018,
           sum(case when match_date >= date '2018-01-01' and 
                         match_date < date '2019-01-01'
                   then 1 else 0
               end) as total_2018
    from match_results
    group by grouping sets ( (location, home_team_name), () );
    

    つまり、クエリを繰り返す必要はありません。また、実際の日付を使用するように日付比較を変更しました。これは、日付部分を抽出するよりも読みやすく、保守しやすいと思います。



    1. MySQL一時テーブルストレージエンジンを見つける方法

    2. Mysql floatはどうなっていますか?

    3. MySQLの同じテーブルで重複を検索する

    4. PostgreSQLのXMLTABLE