0

メンバーと注文 (Mysql) の 2 つのテーブルがあるとします。

Members : 
id   |   name
1    |   Lee
2    |   brad
Orders : 
id   |   member_id   |   status (1: paid, 2: unpaid)   |    total
1    |   1           |   1                             |   1000000 
2    |   1           |   1                             |   1500000
3    |   1           |   2                             |   1300000
4    |   2           |   1                             |   3000000 
5    |   2           |   2                             |   3500000
6    |   2           |   2                             |   3300000

私はSQLクエリを持っています:

SELECT m.name,
       o.member_id,
       COUNT(o.id)  AS number_of_order,
       SUM(o.total) AS total2
FROM   orders o
       LEFT JOIN members m
              ON o.member_id = m.id
GROUP  BY o.member_id

私にこれを与える:

name   |   number_of_order   |   total2
Lee    |   3                 |   3800000
brad   |   3                 |   9800000

私が欲しいのは次のようなものだけです:

    name   |   number_of_order   |   total2
           |  Paid        Unpaid | Paid      Unpaid
    ------------------------------------------------
    Lee    |         3           |   3800000
           |  2             1    | 2500000   1300000
    ------------------------------------------------
    brad   |         3           |   9800000
           |  1             2    | 3000000   6800000
    ------------------------------------------------

その結果を得ることができるクエリを作成する方法は?

御時間ありがとうございます!

4

2 に答える 2

4

関数で条件を使用できますSUM/COUNT

SELECT 
  m.name,
  COUNT(o.id) AS number_of_order,
  SUM(o.total) AS total2,
  COUNT(IF(o.status=1, 1, NULL)) AS paid_order,
  COUNT(IF(o.status=2, 1, NULL)) AS unpaid_order,
  SUM(IF(o.status=1, o.total, 0)) AS paid,
  SUM(IF(o.status=2, o.total, 0)) AS unpaid
FROM orders o 
LEFT JOIN members m ON o.member_id=m.id
GROUP BY o.member_id
于 2012-08-30T03:36:39.017 に答える
0

異なるエイリアスと where 句を使用して、orders テーブルを複数回リストしてみてください。何かのようなもの:

SELECT m.name,
       COUNT(po.id),
       COUNT(uo.id),
       COUNT(o.id),
       SUM(po.total),
       SUM(uo.total),
       SUM(o.total)
FROM   members m,
       orders o,
       orders po,
       orders uo
WHERE  o.member_id = m.id
       AND po.member_id = m.id
       AND uo.member_id = m.id
       AND po.status = 1
       AND uo.status = 2
GROUP  BY m.name

それはまさにあなたが求めていたものではありませんが、正しい方向に進むはずです。

于 2012-08-30T03:42:57.030 に答える