Why not use MOD (%) as in

ABS(RANDOM() % 6)


---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>boun...@mailinglists.sqlite.org] On Behalf Of Cecil Westerhof
>Sent: Sunday, 8 July, 2018 00:44
>To: SQLite mailing list
>Subject: Re: [sqlite] Kind of pivot table
>
>2018-07-08 8:19 GMT+02:00 Cecil Westerhof <cldwester...@gmail.com>:
>
>> I thought there was a problem with RANDOM. I used:
>>     ,        ABS(RANDOM()) / CAST(1.4E18 AS INTEGER) AS Randomiser
>>
>> And it seemed I got a lot of threes.
>>
>> To check this I used:
>>     SELECT Randomiser
>>     ,      COUNT(*)   AS Count
>>     FROM (
>>         SELECT   date
>>         ,        ABS(RANDOM()) / CAST(1.4E18 AS INTEGER) AS
>Randomiser
>>         FROM     CPUUsage
>>         ORDER BY date
>>     )
>>     GROUP BY Randomiser
>>     ORDER BY Randomiser
>>
>> And this gave results like:
>>     "0"    "165491"
>>     "1"    "166270"
>>     "2"    "166207"
>>     "3"    "165727"
>>     "4"    "165619"
>>     "5"    "165749"
>>     "6"    "98042"
>>
>> So 6 is created less often as 0 - 5, but that is in my use case not
>a
>> problem.
>>
>> This worked for me because I have a big table CPUUsage. But if I
>would not
>> have, is there another way to to do this?
>>
>
>By the way better select is:
>    SELECT Randomiser
>    ,      COUNT(*)   AS Count
>    FROM (
>        SELECT   date
>        ,        CAST(ABS(RANDOM()) / (9.223E18 / 7) AS INTEGER) AS
>Randomiser
>        FROM     CPUUsage
>        ORDER BY date
>    )
>    GROUP BY Randomiser
>    ORDER BY Randomiser
>
>This gives:
>    "0"    "156204"
>    "1"    "157032"
>    "2"    "155636"
>    "3"    "156399"
>    "4"    "156256"
>    "5"    "155480"
>    "6"    "156073"
>    "7"    "52"
>
>This is much better. Only very rarely you get a seven you do not
>want.
>(Again in my case not really a problem.)
>
>Because in my case I use Randomiser to get a small subset of the
>records,
>this can be solved with:
>    SELECT Randomiser
>    ,      COUNT(*)   AS Count
>    FROM (
>        SELECT   date
>        ,        CAST(ABS(RANDOM()) / (9.223E18 / 7) AS INTEGER) AS
>Randomiser
>        FROM     CPUUsage
>        ORDER BY date
>    )
>    WHERE    Randomiser <> 7
>    GROUP BY Randomiser
>    ORDER BY Randomiser
>​
>
>​Then I get something like:
>    "0"    "155806"
>    "1"    "156270"
>    "2"    "156473"
>    "3"    "155748"
>    "4"    "155828"
>    "5"    "156196"
>    "6"    "156733"​
>
>--
>Cecil Westerhof
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to