2016-05-10 2:31 GMT+02:00 Darren Duncan <darren at darrenduncan.net>:
> On 2016-05-09 4:24 AM, Cecil Westerhof wrote:
>
>> I need to have a CEIL function in SQLite. This is the way I implemented
>> it:
>> WITH percentage AS (
>> SELECT date
>> , 100.0 * rank / outOf AS percentage
>> ,
>> ??
>> CAST(100.0 * rank / outOf AS int) AS castedPercentage
>> FROM ranking
>> )
>> SELECT date
>> , (CASE WHEN percentage = castedPercentage
>> THEN castedPercentage
>> ELSE castedPercentage + 1
>> END) AS percentage
>> FROM percentage
>>
>> Is this a good way, or is there a better way?
>>
>
> The Ceiling function is not that simple, unless you know that your rank
> and outOf are always non-negative numbers. If they might be negative, you
> would -1 rather than +1 when the result is negative.
?I did not give all information. Both rank and outOf are at least 1 and
rank is <= outOf. So that should not be a problem.
But it looks like that the following is also acceptable:
?
CAST(ROUND(100.0 * rank / outOf + 0.4999999) AS int) AS percentage
and it is a lot simpler. So probably I will go for this.
For the curious, this is how I defined the table:
CREATE TABLE linkedinRanking (
date TEXT NOT NULL DEFAULT CURRENT_DATE,
rank INTEGER NOT NULL,
outOf INTEGER NOT NULL,
CONSTRAINT formatDate CHECK(date = date(strftime('%s', date),
'unixepoch')),
CONSTRAINT notInFuture CHECK(date <= date()),
CONSTRAINT rankIsInt CHECK(TYPEOF(rank) = 'integer'),
CONSTRAINT outOfIsInt CHECK(TYPEOF(outOf) = 'integer'),
CONSTRAINT rankGEOne CHECK(rank >= 1),
CONSTRAINT rankLEOutOf CHECK(rank <= outOf),
CONSTRAINT outOfGEOne CHECK(outOf >= 1),
PRIMARY KEY(date)
);
?Maybe I should rename the date field. ;-)?
--
Cecil Westerhof