# Conditional SQL Functions

> The following conditional functions take one input sequence or two (then, else) sequences, and a Boolean sequence condition. The result sequence of the same type except for `seq_filter_pos()` which returns a result sequence of type `uint4`.

> The two input sequence iterator arguments must be of the same type and result is a sequence of values, or a scalar value. If the two input sequence arguments are of different lengths the operation will be performed on only the number of elements in the shorter of the two sequences.

> seq_iif( cond, then, else ) | Choose the element of the then sequence or the else sequence depending on the Boolean value of the element of the cond sequence. All three sequences are traversed at the same speed (if the element of the then sequence is used, then the element of else sequence is skipped and visa versa). (Please see the Ternary Operations page for further details.)
> seq_if( cond, then, else ) | Choose the element of the then sequence or the else sequence depending on the Boolean value of the element of the cond sequence. Unlike `seq_iif()`, the position in the sequence not used is not changed. (Please see the Ternary Operations page for further details.)
> seq_filter( cond, input ) | Choose the elements of the input sequence for which the Boolean elements of the cond sequence are true.
> seq_filter_pos( cond ) | Get positions of the elements that are `true` in sequence cond.

> ## Example

> Following is an example code snippet demonstrating the conditional functions:

>         -- seq_iif, seq_if

>         INSERT INTO SimpleSequence(testNumber,bVal1,iVal2,iVal3)
>             VALUES(1,'{0,1,0,0,1}','{-1,-2,-3,-4,-5}','{1,2,3,4,5}');

>         SELECT bVal1,iVal2,iVal3,seq_iif(bVal1,iVal2,iVal3) AS "iif" FROM SimpleSequence
>         WHERE testNumber=1;
>         SELECT bVal1,iVal2,iVal3,seq_if(bVal1,iVal2,iVal3) AS "if" FROM SimpleSequence
>         WHERE testNumber=1;

>         bVal1{}
>         iVal2{}
>         iVal3{}
>         iif{}
>         -------------------------------------------------------------------------
>         {0, 1, 0, 0, 1}
>         {-1, -2, -3, -4, -5}
>         {1, 2, 3, 4, 5}
>         {1, -2, 3, 4, -5}

>         bVal1{}
>         iVal2{}
>         iVal3{}
>         if{}
>         -------------------------------------------------------------------------
>         {0, 1, 0, 0, 1}
>         {-1, -2, -3, -4, -5}
>         {1, 2, 3, 4, 5}
>         {1, -1, 2, 3, -2}

>         -- seq_filter

>         INSERT INTO SimpleSequence(testNumber,bVal1,iVal1)
>             VALUES(1,'{0,1,0,1}','{42,-13,27,19}');

>         SELECT bVal1, iVal1, seq_filter(bVal1,iVal1) AS "filter" FROM SimpleSequence
>         WHERE testNumber = 1;

>         bVal1{}
>         iVal1{}
>         filter{}
>         -------------------------------------------------------------------------
>         {0, 1, 0, 1}
>            {42, -13, 27, 19}
>         {-13, 19}

>         -- seq_filter_pos

>         INSERT INTO SimpleSequence(testNumber,bVal1)
>             VALUES(11,[1,0,1,0]);

>         SELECT bVal1,seq_filter_pos(bVal1) As "filter_pos" FROM SimpleSequence
>         WHERE testNumber=11;

>         bVal1
>         filter_pos
>         -------------------------------------------------------------------------
>         {1, 0, 1, 0}
>            {0, 2}