0

次のデータを要約するためのSQLを作成するタスクがあります。

select 
payment,
status, 
interest,
principal
from payment

payment status  interest    principal
1       A       100         0
2       r       0           500
3       o       0           400
4       d       0           100
5       A       0           200
6       A       200         0
7       A       300         0
8       A       0           300
  • 利息に関連する支払いは、利息が 0 でない場合に発生します。
  • 元本に関連する支払いは、元本が 0 でない場合です。
  • データはタイプに分割する必要があります

私が探している結果はこれに似ています:

                 Interest total count           principal total count
Status - A              3                            1
Other                   0                            4
total of all payments   3                            5

グループ機能を利用していますが、利息額以上のグループ化ができません。どんな提案でも大歓迎です。

4

1 に答える 1

0

GROUP BYこれには+を使用することをお勧めしますWITH ROLLUP。何かのようなもの:

SELECT
    IF(`status` = 'A', 'Status A', 'Others') as `-`,
    SUM(`interest` > 0) as `Interest total count`,
    SUM(`principal` > 0) as `principal total count`
FROM
    (
        SELECT 1 as `payment`, 'A' as `status`, 100 as `interest`, 0 as `principal`
        UNION ALL
        SELECT 2, 'r', 0, 500
        UNION ALL
        SELECT 3, 'o', 0, 400
        UNION ALL
        SELECT 4, 'd', 0, 100
        UNION ALL
        SELECT 5, 'A', 0, 200
        UNION ALL
        SELECT 6, 'A', 200, 0
        UNION ALL
        SELECT 7, 'A', 300, 0
        UNION ALL
        SELECT 8, 'A', 0, 300
    ) as `sub`
GROUP BY 1 WITH ROLLUP;

結果:

-       Interest total count    principal total count
Others          0                       3
Status A        3                       2
                3                       5

クエリ:

SELECT
    IF(`status` = 'A', 'Status A', 'Others') as `-`,
    SUM(`interest` > 0) as `Interest total count`,
    SUM(`principal` > 0) as `principal total count`
FROM
    `payment`
GROUP BY 1 WITH ROLLUP;
于 2013-10-04T16:19:41.327 に答える