-1

過去 7 日間のトップセラー (総売上) であるすべての製品 (制限 5) を取得しようとしています。

私の現在のデータベーススキーマは、基本的に次のようになります。

- products
 - id
 - name
 - price

- orders
 - id
 - purchased_at

- orders_products
 - id
 - products_id
 - orders_id
 - quantity
 - paid_price

私はmysqlの構文を探しています。

前もって感謝します!

4

1 に答える 1

3

これは、 を乗じINNER JOINた集合体を持つ のSUM()比較的単純なシーケンスです。quantitypaid_price

SELECT
  p.name,
  /* aggregate SUM() of orders_products qty * price */
  SUM(op.quantity * op.paid_price) AS total_sale_price
FROM
  products
  /* Join through orders_products (which gives the quantity) */
  INNER JOIN orders_products op ON p.id = op.products_id
  /* ...to orders (which provides the date) */
  INNER JOIN orders o ON op.orders_id = o.id
/* The last week... */
WHERE o.purchased_at >= (CURDATE() - INTERVAL 7 DAY)
GROUP BY p.name
/* In descending order of quantity, only the top 5 */
ORDER BY total_paid_price DESC LIMIT 5

時間をかけて集計関数を確認することをお勧めします。

于 2013-02-13T17:41:07.773 に答える