Take the top three of each group from MySQL in one line
MySQL doesn't directly support order operation. It's a bit cumbersome to write these, like the following:
select t.*
from
(select t1.*,
(select count(*)+1
from A
where g=t1.g
and x>t1.x
) as group_id
from A t1
) t
where group_id<=3
order by g asc, group_id asc
In this scenario, it would be easier to use esProc SPL, with only one line:
=connect(”mysqlDB”).query(“select * from A”).group(g;~.top(-3;x)).conj(#2)
*How to retrieve rows larger than the median in a group?
*What is the largest increase in the group?
*Which groups have experienced continuous rise?
SPL is good at solving such grouped subsets and ordered calculation within groups, such as 《SPL Simplified SQL Case Details: Calculate the first N rows of each group》 ; please refer to《SPL Simplified SQL Case Details: Intra-group computing》 and 《SPL Simplified SQL Case Details: Interline Computing》
When the data is not in the database, it is still convenient for SPL to perform complex calculations:
=file(“d:/t.csv”).import(;,",").group...
It's also easy to embed esProc into Java applications,please refer to How to Call an SPL Script in Java
For specific usage, please refer to Getting started with esProc
SPL Official Website 👉 https://www.scudata.com
SPL Feedback and Help 👉 https://www.reddit.com/r/esProcSPL
SPL Learning Material 👉 https://c.scudata.com
SPL Source Code and Package 👉 https://github.com/SPLWare/esProc
Discord 👉 https://discord.gg/cFTcUNs7
Youtube 👉 https://www.youtube.com/@esProc_SPL