3
SELECTステートメントの結果がVIEW内のSELECTの結果と異なります。どのように問題を修正し、同じ結果を表示するか?SELECTと異なる結果とビュー内
アクションテーブル:
+--+---------+--------------+-----------+------+
|id|person_id|action_type_id|currency_id|sum |
+--+---------+--------------+-----------+------+
|1 |1 |1 |1 | 1.00 |
|2 |1 |1 |1 | 5.00 |
|3 |1 |1 |2 |10.00 |
|4 |1 |2 |1 | 2.00 |
|5 |2 |1 |1 |20.00 |
|6 |2 |2 |2 | 5.00 |
+--+---------+--------------+-----------+------+
の選択:
SELECT person_id AS p, currency_id AS c,
(
CAST(
COALESCE(
(SELECT SUM(sum) FROM actions WHERE action_type_id=1 AND person_id=p AND currency_id=c)
, 0)
AS DECIMAL(11,2)) -
CAST(
COALESCE(
(SELECT SUM(sum) FROM actions WHERE action_type_id=2 AND person_id=p AND currency_id=c)
, 0)
AS DECIMAL(11,2))
) AS sum
FROM actions
GROUP BY currency_id, person_id
ORDER BY person_id, currency_id;
結果:
+--+--+------+
|p |c |sum |
+--+--+------+
|1 |1 | 4.00 |
|1 |2 |10.00 |
|2 |1 |20.00 |
|2 |2 |-5.00 |
+--+--+------+
を内部ビューを選択:
CREATE VIEW p_sums AS
SELECT person_id AS p, currency_id AS c,
(
CAST(
COALESCE(
(SELECT SUM(sum) FROM actions WHERE action_type_id=1 AND person_id=p AND currency_id=c)
, 0)
AS DECIMAL(11,2)) -
CAST(
COALESCE(
(SELECT SUM(sum) FROM actions WHERE action_type_id=2 AND person_id=p AND currency_id=c)
, 0)
AS DECIMAL(11,2))
) AS sum
FROM actions
GROUP BY currency_id, person_id
ORDER BY person_id, currency_id;
SELECT * FROM p_sums;
を
結果:
+--+--+------+
|p |c |sum |
+--+--+------+
|1 |1 |29.00 |
|1 |2 |29.00 |
|2 |1 |29.00 |
|2 |2 |29.00 |
+--+--+------+
使用しているmysqlのバージョンは? – Jason
初心者の方(私も1人でした)誰かが解決策を提供するのを手助けしてくれました。それはあなたの切り札を越えてあなたを救うものです。答えの下のチェックボックスをクリックして他の人にソリューションは既に解決されています。 – DRapp
私はそうしましたが、それは私が答えを受け入れることができる前に60秒待つようにされました:) – happytoad