1

私のクライアントは毎週、サードパーティのマーケティング グループを通じてラジオ スポットやメール キャンペーンを実施し、製品を宣伝しています。彼は、自分が毎週どれだけ稼いでいるか、どのくらい使っているかを知りたいと考えており、データを分析してもらいたいと考えています。テーブル データは次のようになります。

tablename: orders
+----------+--------------+---------------------+------------+
| order_id | order_amount | referral            | order_date |
+----------+--------------+---------------------+------------+
| 1        | 16.00        | Radio: Jack Johnson | 2013-07-01 |
| 2        | 50.00        | Radio: Jack Johnson | 2013-07-02 |
| 3        | 16.00        | Radio: Jack Johnson | 2013-07-02 |
| 4        | 50.00        | Radio: Thabo Mbeki  | 2013-07-03 |
| 5        | 16.00        | Email: Renewal      | 2013-07-08 |
| 6        | 50.00        | Other               | 2013-07-08 |
| 7        | 16.00        | Email: Renewal      | 2013-07-08 |
| 8        | 50.00        | Radio: Thabo Mbeki  | 2013-07-09 |
+----------+--------------+--------------+-------------------+

tablename: media
+----------+-------+-------+--------------+-------+------------+
| media_id | spots | cost  | name         | type  | date       |
+----------+-------+-------+--------------+-------+------------+
| 1        | 10    | 10000 | Jack Johnson | radio | 2013-07-01 |
| 2        | 5     | 5000  | Thabo Mbeki  | radio | 2013-07-01 |
| 3        | 10    | 10000 | Jack Johnson | radio | 2013-07-08 |
| 4        | 5     | 5000  | Thabo Mbeki  | radio | 2013-07-08 |
| 5        | 1     | 250   | Renewal      | email | 2013-07-08 |
+----------+---------------+--------------+--------------------+

次のような HTML テーブルを生成する必要があります。

+------------+--------------+-------+------+----------+---------+--------------+----------------+
| week       | name         | type  |spots | cost     | revenue | total orders | avg. per order |
+------------+--------------+-------+------+----------+---------+--------------+----------------+
| 2013-07-01 | Jack Johnson | radio | 10   | 10000    | 82.00   | 3            | 27.33          |
| 2013-07-01 | Thabo Mbeki  | radio | 5    | 5000     | 50.00   | 1            | 50.00          |
+------------+--------------+-------+------+----------+---------+--------------+----------------+

テーブルを結合し、注文からの紹介フィールドでグループ化する方法を理解しようとすることは、私にとって複雑になります。orders.referral は media.name と一致しないため、あるとWHERE referral LIKE %name思いますが、その方法がわかりません。

4

3 に答える 3

0

ここで大助かり。これは私が最終的に使用したクエリです:

SELECT m.date, m.name, m.type, m.spots, m.cost, 
       SUM(o.order_amount) as revenue, 
       COUNT(o.order_amount) as orders,
       SUM(o.order_amount)/COUNT(o.order_amount) as average_order 
FROM   media m
JOIN   orders o
ON     LOWER(o.referral) = CONCAT(LOWER(m.type), ': ' ,LOWER(m.name))
WHERE  (DATE(o.order_date) BETWEEN '2013-06-24' AND '2013-06-30')
GROUP BY m.name, m.type
于 2013-07-11T15:04:49.593 に答える
0

私はこれがうまくいくと信じています:

SELECT m.name, [other needed columns]
FROM media m JOIN orders o ON o.referral LIKE '%' + m.name +'%'
WHERE m.date between [date] and [date]
GROUP BY m.name, [other groupings]

お役に立てれば!

于 2013-07-10T15:32:49.643 に答える
0

「その他」を無視すると、より良い結合WHERE句になります

WHERE orders.order_date = media.date
 AND  LOWER(orders.referral)   = LOWER(media.type + ": " + media.name)

これは Sybase の構文です。MySQL 用に少し調整する必要がある場合は申し訳ありません

「その他」に対処するには、単に「メディア」テーブルに外部結合を実行します。

(正確さをチェックしませんでした) のようなものは、日付ごとのレポートを作成します。必要に応じて、週ごとにグループ化するためにさらにマッサージする必要があります(難しいことではありませんが、質問の主な範囲外だと思います)

SELECT SUM(order.amount) AS revenue, COUNT(order.amount) as total_orders
      ,SUM(order.amount)/COUNT(order.amount) as average_order
      ,SUM(spots) spots, media.type, media.name, order_date
FROM   order
LEFT OUTER JOIN media 
ON        orders.order_date = media.date
     AND  LOWER(orders.referral)   = LOWER(media.type + ": " + media.name)
GROUP BY order.referral, order.date
-- May be add to group by:    , COALESCE(media.type,media.name,"Other")
于 2013-07-10T15:26:41.980 に答える