1

私はテーブルを持っていますproducts:

+----------+-----------+----------+---------+
|family_id |shopper_id |product_id|quantity |
+----------+-----------+----------+---------+
|A         |1          |Kit Kat   |10       |
|A         |1          |Kit Kat   |5        |
|A         |1          |Snickers  |9        |
|A         |2          |Kit Kat   |7        |
|B         |3          |Kit Kat   |2        |
+----------+---------- +----------+---------+

製品ごとに、2 つの合計を計算したい:

  • 買い物客あたりの合計数量
  • 家族ごとの総量。同じ家族のすべての買い物客の合計数量。

最終的なテーブルは次のようになります。

+----------+----------+-------------------------+-----------------------+
|shopper_id|product_id|total_quantity_shopper   |total_quantity_family  |
+----------+----------+-------------------------+-----------------------+
|1         |Kit Kat   | 15                      | 22                    |
|1         |Snickers  | 9                       | 9                     |
|2         |Kit Kat   | 7                       | 22                    |
|3         |Kit Kat   | 2                       | 2                     |
+----------+----------+-------------------------|-----------------------|

これは私のクエリです:

SELECT
    distinct shopper_id,
    product_id,
    sum(quantity) OVER (PARTITION BY shopper_id, product_id) as total_quantity_shopper,
    sum(quantity) OVER (PARTITION BY family_id, product_id) as total_quantity_family
FROM
    products;

しかし、クエリプランを見ると、非常に非効率に見えます (と思います)。上記のクエリを改善するにはどうすればよいですか?

4

1 に答える 1

3

家族は買い物客にとってヒエラルキーだと思います。したがって、group byウィンドウ関数をお勧めします。

select family_id, shopper_id, product_id,
       sum(quantity) as total_quantity_shopper,
       sum(sum(quantity)) over (partition by family_id, product_id) as total_quantity_family
from products
group by family_id, shopper_id, product_id
于 2020-11-04T21:52:11.023 に答える