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

groupbyを使用するときに結合されたテーブルの合計を取得する方法-間違った結果を取得する

    毎日、あなたが望んでいることを理解しています:

    • order_items.energy_usedの合計 その日に作成されたすべての注文について
    • created_at およびorder_sum 最新のorderに対応する その日に作成された

    サンプルデータはそれをあまり表していない-それは1日に1つの注文しかない。また、なぜcreated_atなのかは不明です。 両方のテーブルで繰り返されます。あなたは本当にorder_idに頼るべきです 両方のテーブルを関連付ける

    上記の目的のためのクエリは次のとおりです。これはordersを結合することで機能します 1日あたりの総エネルギーを計算する集計クエリを含むテーブル(order_idを使用) created_atを取得するには ordersからの日付 )、および1日あたりの最新の注文でフィルタリングします:

    select 
        date(o.created_at) date_of_month,
        i.total_energy_used,
        o.created_at last_order_date,
        o.order_sum last_order_sum
    from orders o
    inner join (
        select date(o1.created_at) date_of_month, sum(i1.energy_used) total_energy_used
        from orders o1
        inner join order_items i1 on o1.id = i1.order_id
        group by date(o1.created_at)
    ) i on i.date_of_month = date(o.created_at)
    where o.created_at = (
        select max(o1.created_at)
        from orders o1
        where date(o1.created_at) = date(o.created_at)
    )
    

    DBフィドルのデモ

    date_of_month | total_energy_used | last_order_date     | last_order_sum
    :------------ | ----------------: | :------------------ | -------------:
    2020-01-25    |                77 | 2020-01-25 09:13:00 |          25.13
    2020-01-26    |                75 | 2020-01-26 10:14:00 |          14.00
    2020-01-27    |                 0 | 2020-01-27 11:13:00 |          35.00
    


    1. SQL Server AlwaysOn可用性グループ:インストールと構成。パート2

    2. PostgreSQL9.1での自律型トランザクション

    3. 2つのSELECTクエリを組み合わせる

    4. SQL Serverは、コンマ区切りの文字列を1つの列に並べ替えます