abs() vs abs[] for fby "while" all() vs all[]

https://learninghub.kx.com/forums/topic/abs-vs-abs-for-fby-while-all-vs-all-2

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!

See these sections of docs on:

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]