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

SUM()、GROUP_BY()、およびLEFT_JOIN()を組み合わせると、誤った結果が返されます。修正方法は?

    GROUP BY 結果をグループ化します 、個別のテーブル行ではありません。

    コメントに基づいて、これらのタグの1つにリンクされていないタイムテーブルの行のみを返します

    SELECT 
        date_format(from_unixtime(date), '%Y-%m-%d') as myDate,
        ROUND(SUM(time) / 60,1) as hours
    FROM `time` h
      LEFT JOIN (
        SELECT DISTINCT te.entity_id
        FROM tag_entity te
          LEFT JOIN tags t on t.tag_id = te.tag_id
        WHERE te.entity_id IS NOT NULL AND t.tag_name IN ('foo', 'bar', 'baz')
      ) g ON h.entity_id = g.entity_id
    WHERE g.entity_id IS NULL
    group by
        myDate
    
    order by
        hours DESC, myDate ASC
    


    1. MySQL / PDO ::quote()、整数を一重引用符で囲む

    2. Nullでのメンバー関数query()の呼び出し

    3. 左結合、合計、およびカウントグループ

    4. MySQL5.6DATETIMEはミリ秒/マイクロ秒を受け入れません