2

私の問題を示すためにポイントの例を作成しました。

メンバーは他のメンバーにポイントを与えることができます。ユーザーが持っているポイントとユーザーが与えたポイントを表示するクエリを作成しようとしています。

データベースの例

メンバー、

+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  3 | user3    |
+----+----------+

ポイント、

+-------+--------+--------+
| IDFor | IDFrom | Pointz |
+-------+--------+--------+
|     1 |      2 |      5 |
|     1 |      2 |      5 |
|     3 |      1 |      2 |
+-------+--------+--------+

私が求めるリターンは、

+-----------+--------+-------+
| username  | Pointz | Given |
+-----------+--------+-------+
| user1     |     10 |     2 |
| user2     |      0 |    10 |
| user3     |      2 |     0 |
+-----------+--------+-------+

両方のクエリが返され、

+-----------+--------+-------+
| username  | Pointz | Given |
+-----------+--------+-------+
| user1     |     10 |     4 |
| user2     |      0 |    10 |
| user3     |      2 |     0 |
+-----------+--------+-------+

http://sqlfiddle.com/#!2/32ae6/6

SELECT a.`username`, sum(a.`Pointz`), sum(b.`Pointz`) FROM
  (SELECT * FROM `members`
LEFT JOIN  `Example`.`Points` AS p ON `members`.`id` = p.`IDFor` ) AS a
LEFT JOIN

  (SELECT * FROM `members` 
LEFT JOIN  `Example`.`Points` AS n ON `members`.`id` = n.`IDFrom` ) AS b
ON a.id = b.id
GROUP BY  a.`id`

http://sqlfiddle.com/#!2/32ae6/7

SELECT `members`.`username`,sum(p.`Pointz`),sum(n.`Pointz`)
FROM `members`
LEFT JOIN `Example`.`Points` as p ON p.`IDFor` = `members`.`id`
LEFT JOIN `Example`.`Points` as n ON n.`IDFrom` = `members`.`id`
GROUP BY `members`.`id`

ポップアップする一般的な質問のようですが、解決策が見つかりませんでした。同様の質問からの他のすべての試みはうまくいきませんでした。ありがとうございます。

4

3 に答える 3

1

これを試して:

SELECT m.`username`, 
       ifnull((SELECT sum(`Pointz`) FROM Points p
        WHERE p.IDFor = m.id ), 0),
       ifnull((SELECT sum(`Pointz`) FROM Points p
        WHERE p.IDFrom = m.id ), 0)
FROM Members m

SQLフィドル

于 2013-08-18T11:06:22.537 に答える
1

これはあなたが欲しいものです

select a.username, ifnull(Pointz, 0) Pointz, ifnull(Given, 0) Given from
  (SELECT id, `username`, sum(`Pointz`) Pointz FROM `members` 
  LEFT JOIN `Points` ON `members`.`id` = `Points`.`IDFor` group by id) a 
  left join
  (SELECT id, `username`, sum(`Pointz`) Given FROM `members` 
  LEFT JOIN `Points` ON `members`.`id` = `Points`.`IDFrom` group by id) b
  on a.id = b.id
于 2013-08-18T10:56:31.657 に答える
1

試す:

SELECT m.username, 
       COALESCE( pr.preceived, 0 ) as Pointz,
       COALESCE( pg.pgiven, 0 ) as Given

FROM members m

LEFT JOIN ( SELECT IDFor, sum(pointz) as preceived 
            FROM Points 
            GROUP BY IDFor ) pr
ON m.id = pr.IDFor

LEFT JOIN ( SELECT IDFrom, sum(pointz) as pgiven 
            FROM Points 
            GROUP BY IDFrom ) pg
ON m.id = pg.IDFrom

http://sqlfiddle.com/#!2/32ae6/48

于 2013-08-18T10:57:38.237 に答える