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

mysqlにはOracleの分析関数と同等のものがありますか?

    MySQLの変数を使用して分析関数を模倣できることを伝えたかっただけです。たとえば、SUMOVERは次のように実行できます。

    
    SELECT amount, 
        @sum := @sum + amount as sum 
    FROM tbl
    JOIN (SELECT @sum := 0) s
    
    

    PARTITION BYが必要な場合 、それは可能ですが、もう少し複雑です。基本的に、別の@variableを追加します アカウント(またはパーティション分割するもの)を監視し、アカウント(または変数)で並べ替えてから、@sumをリセットします。 アカウントが変更されたとき。次のように:

    
    SELECT account, 
        amount, 
        (case when @account != account then @sum := amount else @sum := @sum + amount end) as sum,
        (case when @account != account then @account := account else @account end) as _
    FROM (SELECT * FROM tbl ORDER BY account)
    JOIN (SELECT @sum := 0) s
    JOIN (SELECT @account := '') a
    
    

    パーティション効果を実現するために実行する必要があった2つの主要な変更に注意してください。

    1. メインテーブル(tbl )は、ORDER BYを使用してサブ選択に含まれます 句。これが必要なのは、MySQLが@accountを実行する場合です。 変数テストの値はすでに注文されている必要があります。これが行われなかった場合、アカウント値だけでなく、誤った合計値も取得されます。

    2. as _というエイリアスの「extra」列があります 。結果を使用する場合はこの列を無視できますが、@accountの順序は無視できます。 チェックと変更は@sumの後に行う必要があります チェックして変更します。

      これでも、アカウントが最後であることを気にしない場合は、列を並べ替えることを選択できます。これは、最初のaccountを取り出すことによって行われます。 最後の_と重複しているため 列に変更し、明らかにエイリアスの名前を_に変更しました accountへ 。

    リソース:



    1. 例によるフラスコ– Postgres、SQLAlchemy、およびAlembicのセットアップ

    2. SQLServer-パラメータスニッフィング

    3. スカラー変数を宣言する必要があります

    4. OracleのEntityFrameworkサポートを使用してパスカルケースを強制するにはどうすればよいですか?