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

Laravelの雄弁なクエリ

    これは完全な答えではありませんが、近いです。データをどのように処理しても、cash_hasをどのように考えているのかわかりません。 。また、クエリビルダーに戻すのが難しくなく、より役立つと思うので、生のSQLを保持しています。また、正確な列名がわからないため、それらのいくつかを修正する必要があるかもしれません。

    SELECT
        COALESCE(outlets_admin.name, outlets.name) AS outlet, 
        COALESCE(boys_admin.name, boys.name) AS delivery_boy,
        SUM(IF(cm.source_type = 'admin', amount, 0)) AS cash_taken,
        SUM(IF(cm.source_type = 'deliveryBoy', amount, 0)) AS cash_returned,
        SUM(IF(cm.source_type = 'admin', amount, 0)) - SUM(IF(cm.source_type = 'deliveryBoy', amount, 0)) AS cash_has
    FROM delivery_cash_manages cm
    LEFT JOIN outlets ON outlets.id = cm.destination_id AND cm.source_type = 'deliveryBoy'
    LEFT JOIN delivery_boys boys ON boys.id = cm.source_id AND cm.source_type = 'deliveryBoy'
    LEFT JOIN outlets outlets_admin ON outlets_admin.id = cm.source_id AND cm.source_type = 'admin'
    LEFT JOIN delivery_boys boys_admin ON boys_admin.id = cm.destination_id AND cm.source_type = 'admin'
    WHERE COALESCE(outlets.id, outlets_admin.id) = '2'  #  This is where you plug in your $outlet_id
    GROUP BY outlet, delivery_boy
    

    ただし、クエリでエラーが発生する理由は、何かでグループ化する場合は、集計列ではない選択したすべてのもの(sum、max、avgなどの関数)でグループ化する必要があるためです。




    1. プールから無効なデータベース接続を削除する方法

    2. ネストされたmysqlクエリをcodeigniterスタイルに変換します

    3. MySQL:複数のwhere条件を組み合わせる

    4. phpからのJSONのデータ値で列データ行グループを表示するためのクエリ