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

グループ化されたデータ行での結合の使用

    問題は、GROUP BYを使用する場合です。 、SELECTのみ可能 集計とグループ化した列。

    invoices.id 選択しようとしたがグループ化されなかった列です。この列をGROUP BYに追加することをお勧めします 条項。

    SELECT 
       invoices.id, 
       sum(grossTotal)-IFNULL(depositsCheck.previouslyPaid,0) as todayTotal, 
       depositsCheck.previouslyPaid, sum(grossTotal) as grossTotal  
    FROM `invoices`    
        LEFT JOIN (SELECT SUM(amount) as previouslyPaid, invNo 
        FROM deposits 
        GROUP BY invNo) depositsCheck ON depositsCheck.invNo=invoices.id 
    GROUP BY  invoices.paymentType, invoices.id ORDER BY id DESC
    

    あなたが与えたサンプルテーブルの場合、おそらく次のようになります:

    id    |    paymentType     |     grossTotal   |    dateTime   |   previouslyPaid
    1     |         Cash       |        1000      |   UNIX TIME   |       150
    2     |         Card       |        1350      |   UNIX TIME   |       350
    3     |         Card       |        1250      |   UNIX TIME   |         0
    4     |         Card       |        750       |   UNIX TIME   |         0
    

    ただし、一般的には、次のようなものになります。

    id    |    paymentType     |     grossTotal   |    dateTime   |   previouslyPaid
    1     |         Cash       |        1000      |   UNIX TIME   |       150
    1     |         Card       |        1000      |   UNIX TIME   |       300
    2     |         Cash       |        1350      |   UNIX TIME   |       350
    2     |         Card       |        1350      |   UNIX TIME   |       350
    

    上記のように、請求書1の場合、150は現金で支払われ、300はカードで支払われました。




    1. 挿入された行のPKガイドを取得するための最良の方法

    2. MySQLを起動できません、ポート3306がビジーです

    3. MySQL全文検索で使用するためのエスケープ文字列

    4. ResultSetを閉じた後の操作は許可されません(mysql、java)