SQL - проблема Count () - PullRequest
       7

SQL - проблема Count ()

2 голосов
/ 06 февраля 2009

У меня есть таблица со столбцом начисления / кредита:

Item | PriceVal | CostVal | CHARGE_CODE
1        5             3         CH
2        8             5         CH
1       -5            -3         CR
3        7             1         CH
4       15            10         CH
1        5             3         CH

У меня есть запрос, который мне нужен, чтобы получить чистую цену и стоимость, но меня также интересует чистая плата. Прямо сейчас у меня есть:

SELECT Item, SUM(PriceVal), SUM(CostVal)
FROM Table
GROUP BY Item

Как получить другой столбец со значением

COUNT(SUM(CHARGE_CODE=CH)-SUM(CHARGE_CODE=CR))

Я в растерянности.

Ответы [ 3 ]

8 голосов
/ 06 февраля 2009

count () будет считать один для каждого значения, которое не является нулевым, поэтому я не думаю, что это именно то, что вы хотите. Убери отсчёт и возьми

sum(case when charge_code = CH then costval else 0 end) 
- sum(case when charge_code = 'CR' then costval else 0 end)
2 голосов
/ 06 февраля 2009

Поскольку в таблице уже указаны долларовые значения в виде отрицательных значений, вы можете использовать простую формулу:

select
    Item,
    sum(PriceVal),
    sum(CostVal),
    sum(PriceVal-CostVal)
from Table
group by Item

Я не думаю, что вы должны вычитать кредитные позиции, поскольку они уже отрицательные.

Если вы действительно хотите, хотите, чтобы чистая Количество транзакций:

select
    Item,
    sum(PriceVal),
    sum(CostVal),
    sum(case when charge_code = 'CH' then 1 else 0 end) -
        sum(case when charge_code = 'CR' then -1 else 0 end)
from Table
group by Item

или, если есть только два кода оплаты, заменить:

sum(case when charge_code = 'CH' then 1 else -1 end)

для последнего столбца.

0 голосов
/ 06 февраля 2009

Не на 100% уверен, что вы хотите, но вы можете считать только определенные строки, как это:

SELECT COUNT(IF(CHARGE_CODE=CH,1,NULL)) ...

И аналогично суммируйте определенные значения из определенных строк следующим образом:

SELECT SUM(IF(CHARGE_CODE=CH,PriceVal,0)) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...