1

私はこの質問を作成しました、魔女は今世話をされています、しかし私は同じ質問で別の苦労をしています:

SELECT
  t.type,
  SUM( t.external_account )
FROM
  u_contracts c,
  u_data u,
  u_transactions t
WHERE
  c.user_id = u.id
  AND t.contract_id = c.id
  AND t.nulled =0
  AND DATE (c.init_date) < DATE (u.dead)
  AND u.dead IS NOT NULL
  AND t.type != 'repay'
GROUP BY
  t.type
ORDER BY
  FIELD( t.type, 'initial', 'comission', 'overpay', 'penalty', 'penalty2' );

私が得た結果は次のとおりです。

+-----------+---------------------------+
| type      | SUM( t.external_account ) |
+-----------+---------------------------+
| prolong   |                 360560.00 |
| reg       |                   3889.00 |
| reg2      |                    301.20 |
| initial   |                 610628.54 |
| comission |                 125623.49 |
| overpay   |                   6461.57 |
| penalty   |                  21461.52 |
| penalty2  |                   4010.00 |
+-----------+---------------------------+

タイプprolong + reg + reg2の結果を合計して、リストの最後に追加する必要があります。

GROUP BY t.type今、私はそれらが要求の結果として来ることを考えると、それらをどのように合計するのか全くわかりません。

4

1 に答える 1

3

これを試してください:

SELECT 
    t.type,
    SUM(t.external_account)
FROM
(
    SELECT
      CASE t.type
        WHEN 'prolong' THEN 'prolong + reg + reg2'
        WHEN 'reg' THEN 'prolong + reg + reg2'
        WHEN 'reg2' THEN 'prolong + reg + reg2'
        ELSE t.type
      END AS type,
      t.external_account
    FROM
      u_contracts c,
      u_data u,
      u_transactions t
    WHERE
      c.user_id = u.id
      AND t.contract_id = c.id
      AND t.nulled =0
      AND DATE (c.init_date) < DATE (u.dead)
      AND u.dead IS NOT NULL
      AND t.type != 'repay'
) t 
GROUP BY
      t.type
ORDER BY
  FIELD( t.type, 'initial', 'comission', 'overpay', 'penalty', 'penalty2' );
于 2012-10-03T12:04:58.320 に答える