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

Mysqlは2つのテーブルを結合します。

    金額を合計する前にすべての支払いレコードをすべての販売レコードと結合しているため、支払い金額に販売レコードの数を掛けています。

    最初に集約し、次に参加するだけです。

    日付、時刻、名前ごとに常に1つの支払いレコードしか存在できない場合:

    select p.name, p.time, p.name, s.sales_total, p.amount
    from payments p
    join
    (
      select date, time, name, sum(total) as total
      from sales
      group by date, time, name
    ) s
     on s.date = p.date and s.time = p.time and s.name = p.name
    where p.date = date '2017-04-01';
    

    それ以外の場合:

    select p.name, p.time, p.name, s.total, p.amount
    (
      select date, time, name, sum(amount) as amount
      from payments
      group by date, time, name
    ) p
    join
    (
      select date, time, name, sum(total) as total
      from sales
      group by date, time, name
    ) s
     on s.date = p.date and s.time = p.time and s.name = p.name
    where p.date = date '2017-04-01';
    



    1. MySqlWorkbenchでのキーボードショートカットのカスタマイズ

    2. SQL ServerのPARSE()とTRY_PARSE()の違い:違いは何ですか?

    3. MyBatisを使用してオブジェクトのJavaリストをOracleストアドプロシージャに渡す方法は?

    4. 大きなテーブルでのSQLServerクエリのパフォーマンスを向上させる