Изучаем sql



Pdf көрінісі
бет197/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   193   194   195   196   197   198   199   200   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )


Глава 11. Условная логика
FROM account a
WHERE (a.avail_balance, a.pending_balance) <>
(SELECT
SUM(CASE
WHEN t.funds_avail_date > CURRENT_TIMESTAMP()
THEN 0
WHEN t.txn_type_cd = 'DBT'
THEN t.amount * 1
ELSE t.amount
END),
SUM(CASE
WHEN t.txn_type_cd = 'DBT'
THEN t.amount * 1
ELSE t.amount
END)
FROM transaction t
WHERE t.account_id = a.account_id);
С помощью условной логики исходные данные поставляются в агре
гатные функции 
sum()
двумя выражениями 
case
, позволяя суммиро
вать соответствующие денежные объемы.
Проверка существования
В некоторых случаях требуется установить существование связи меж
ду двумя сущностями, не касаясь количественных показателей. На
пример, нужно узнать, есть ли у клиента текущие или сберегательные
счета, не интересуясь тем, сколько у него счетов каждого типа. Вот за
прос с несколькими выражениями 
case
, формирующими два столбца
выходных данных. Первый показывает, есть ли у клиента текущие
счета, а второй – есть ли сберегательные счета:
mysql> 
SELECT c.cust_id, c.fed_id, c.cust_type_cd,
> CASE
> WHEN EXISTS (SELECT 1 FROM account a
> WHERE a.cust_id = c.cust_id
> AND a.product_cd = 'CHK') THEN 'Y'
> ELSE 'N'
> END has_checking,
> CASE
> WHEN EXISTS (SELECT 1 FROM account a
> WHERE a.cust_id = c.cust_id
> AND a.product_cd = 'SAV') THEN 'Y'
> ELSE 'N'
> END has_savings
> FROM customer c;
++++++
| cust_id | fed_id | cust_type_cd | has_checking | has_savings |
++++++
| 1 | 111111111 | I | Y | Y |
| 2 | 222222222 | I | Y | Y |


Примеры выражений case
225
| 3 | 333333333 | I | Y | N |
| 4 | 444444444 | I | Y | Y |
| 5 | 555555555 | I | Y | N |
| 6 | 666666666 | I | Y | N |
| 7 | 777777777 | I | N | N |
| 8 | 888888888 | I | Y | Y |
| 9 | 999999999 | I | Y | N |
| 10 | 041111111 | B | Y | N |
| 11 | 042222222 | B | N | N |
| 12 | 043333333 | B | Y | N |
| 13 | 044444444 | B | N | N |
++++++
13 rows in set (0.00 sec)
Каждое выражение 
case
включает связанный подзапрос к таблице 
ac
count
: один для поиска текущих счетов, другой – сберегательных сче
тов. Поскольку каждый блок 
when
использует оператор 
exists
, условия
выполняются, если у клиента есть, по крайней мере, один счет иско
мого типа.
В других случаях нас может интересовать количество встретившихся
строк, но лишь постольку поскольку. Например, следующий запрос
с помощью простого выражения 
case
подсчитывает количество счетов
каждого клиента, а затем возвращает 
'None'

'1'

'2'
или 
'3+'
:
mysql> 


Достарыңызбен бөлісу:
1   ...   193   194   195   196   197   198   199   200   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет