KX Community

Find answers, ask questions, and connect with our KX Community around the world.
KX Community Guidelines

Home Forums kdb+ abs() vs abs[] for fby “while” all() vs all[]

Tagged: ,

  • abs() vs abs[] for fby “while” all() vs all[]

    Posted by kdb_newbie on May 18, 2024 at 12:17 pm

    May I ask how does abs() differs from abs[] in a select statement using fby clause?

    q)tab:([] sym:`g1`g3`g1`g1`g2`g3;price:-2.5 2 -0.5 -0.2 3 4)
    q)tab
    sym price
    ---------
    g1 -2.5
    g3 2
    g1 -0.5
    g1 -0.2
    g2 3
    g3 4
    
    q)select from tab where abs(price)=({abs max x};price) fby sym
    'type
    [0] select from tab where abs(price)=({abs max x};price) fby sym
    ^
    q)

    and also similarly, in my qsql, if I use all with square brackets, it throws a rank error but all() works fine

    select from xxx where all[col=`a;col2=`b] //rank error

    How do I know wher
    Thank you!

    rocuinneagain replied 4 weeks, 1 day ago 2 Members · 1 Reply
  • 1 Reply
  • rocuinneagain

    Member
    May 20, 2024 at 8:45 am

    <div>See these sections of docs on:</div>

    Order of evaluation also matters: Left-of-Right Evaluation

    abs(price)=({abs max x};price)

    Will run in order:

    1. ({abs max x};price)
    2. (price)=({abs max x};price)
    3. abs(price)=({abs max x};price)

    whereas:

    abs[price]=({abs max x};price)

    Will run in order:

    1. ({abs max x};price)
    2. abs[price]
    3. abs[price]=({abs max x};price)

    This tries to pass 2 arguments to all which only takes one argument so you get a rank error

    https://code.kx.com/q/ref/all-any/#all

    all[col=a;col2=b]


Log in to reply.