Изучаем sql


SELECT c.cust_id, c.fed_id, c.cust_type_cd



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

SELECT c.cust_id, c.fed_id, c.cust_type_cd,
> CASE (SELECT COUNT(*) FROM account a
> WHERE a.cust_id = c.cust_id)
> WHEN 0 THEN 'None'
> WHEN 1 THEN '1'
> WHEN 2 THEN '2'
> ELSE '3+'
> END num_accounts
> FROM customer c;
+++++
| cust_id | fed_id | cust_type_cd | num_accounts |
+++++
| 1 | 111111111 | I | 3+ |
| 2 | 222222222 | I | 2 |
| 3 | 333333333 | I | 2 |
| 4 | 444444444 | I | 3+ |
| 5 | 555555555 | I | 1 |
| 6 | 666666666 | I | 2 |
| 7 | 777777777 | I | 1 |
| 8 | 888888888 | I | 2 |
| 9 | 999999999 | I | 3+ |
| 10 | 041111111 | B | 2 |
| 11 | 042222222 | B | 1 |
| 12 | 043333333 | B | 1 |
| 13 | 044444444 | B | 1 |
+++++
13 rows in set (0.01 sec)


226
Глава 11. Условная логика
В этом запросе я не хотел проводить различия между клиентами, име
ющими более двух счетов, поэтому выражение 
case
просто создает ка
тегорию 
'3+'
. Подобный запрос может быть полезным при поиске кли
ентов, с которыми можно связаться и предложить открыть новый счет
в банке.
Ошибки деления на нуль
Проводя вычисления, включающие деление, нужно все время забо
титься о том, чтобы знаменатель никогда не был равен нулю. Некото
рые серверы БД, такие как Oracle Database, встретив нулевой знамена
тель, формируют ошибку, а MySQL просто присваивает результату вы
числения значение 
null
, как показывает следующий пример:
mysql> 
SELECT 100 / 0;
++
| 100 / 0 |
++
| NULL |
++
1 row in set (0.00 sec)
Чтобы защитить вычисления от ошибок или, еще хуже, от загадочного
получения 
null
, следует ко всем знаменателям применять условную
логику, как показано далее:
mysql> 


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




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

    Басты бет