Last active
August 29, 2015 14:03
-
-
Save randyzwitch/a8d6d8a48e9f4f8f9c09 to your computer and use it in GitHub Desktop.
Generating SQL code with Julia
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#Starting portion of query, the groupby columns | |
julia> groupbycols ="select | |
interact.interactionid, | |
interact.agentname, | |
interact.agentid, | |
interact.agentgroup, | |
interact.agentsupervisor, | |
interact.sitename, | |
interact.dnis, | |
interact.agentextension, | |
interact.interactiondirection, | |
interact.interactiontype, | |
interact.customerid, | |
interact.customercity, | |
interact.customerstate, | |
interact.interactiondatetime, | |
interact.durationinms," | |
#Generate CASE statements based on the number of possible values of queryid | |
julia> function casestatements(repetitions::Int64) | |
for queryid in 1:repetitions | |
println("MAX(CASE WHEN q.queryid = $queryid then q.score END) as q$(queryid)score,") | |
end | |
for queryid in 1:repetitions | |
println("MIN(CASE WHEN q.queryid = $queryid then q.startoffsetinms END) as q$(queryid)startoffset,") | |
end | |
for queryid in 1:repetitions | |
println("MAX(CASE WHEN q.queryid = $queryid then q.endoffsetinms END) as q$(queryid)endoffset,") | |
end | |
#Last clause, so repeat it up to number of repetitions minus 1, then do simple print to get line without comma at end | |
for queryid in 1:repetitions-1 | |
println("SUM(CASE WHEN q.queryid = $queryid and q.score > q.mediumthreshold THEN 1 END) as q$(queryid)hits,") | |
end | |
println("SUM(CASE WHEN q.queryid = $repetitions and q.score > q.mediumthreshold THEN 1 END) as q$(repetitions)hits") | |
end | |
#Ending table statement | |
julia> tablestatements = "from db.table1 as interact | |
left join db.table2 as q on (interact.interactionid = q.interactionid) | |
left join db.table3 as t on (interact.interactionid = t.interactionid) | |
group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;" | |
#Submitting all of the statements on one line is usually frowned upon, but this will generate my SQL code | |
julia> println(groupbycols);casestatements(5);println(tablestatements) | |
select | |
interact.interactionid, | |
interact.agentname, | |
interact.agentid, | |
interact.agentgroup, | |
interact.agentsupervisor, | |
interact.sitename, | |
interact.dnis, | |
interact.agentextension, | |
interact.interactiondirection, | |
interact.interactiontype, | |
interact.customerid, | |
interact.customercity, | |
interact.customerstate, | |
interact.interactiondatetime, | |
interact.durationinms, | |
MAX(CASE WHEN q.queryid = 1 then q.score END) as q1score, | |
MAX(CASE WHEN q.queryid = 2 then q.score END) as q2score, | |
MAX(CASE WHEN q.queryid = 3 then q.score END) as q3score, | |
MAX(CASE WHEN q.queryid = 4 then q.score END) as q4score, | |
MAX(CASE WHEN q.queryid = 5 then q.score END) as q5score, | |
MIN(CASE WHEN q.queryid = 1 then q.startoffsetinms END) as q1startoffset, | |
MIN(CASE WHEN q.queryid = 2 then q.startoffsetinms END) as q2startoffset, | |
MIN(CASE WHEN q.queryid = 3 then q.startoffsetinms END) as q3startoffset, | |
MIN(CASE WHEN q.queryid = 4 then q.startoffsetinms END) as q4startoffset, | |
MIN(CASE WHEN q.queryid = 5 then q.startoffsetinms END) as q5startoffset, | |
MAX(CASE WHEN q.queryid = 1 then q.endoffsetinms END) as q1endoffset, | |
MAX(CASE WHEN q.queryid = 2 then q.endoffsetinms END) as q2endoffset, | |
MAX(CASE WHEN q.queryid = 3 then q.endoffsetinms END) as q3endoffset, | |
MAX(CASE WHEN q.queryid = 4 then q.endoffsetinms END) as q4endoffset, | |
MAX(CASE WHEN q.queryid = 5 then q.endoffsetinms END) as q5endoffset, | |
SUM(CASE WHEN q.queryid = 1 and q.score > q.mediumthreshold THEN 1 END) as q1hits, | |
SUM(CASE WHEN q.queryid = 2 and q.score > q.mediumthreshold THEN 1 END) as q2hits, | |
SUM(CASE WHEN q.queryid = 3 and q.score > q.mediumthreshold THEN 1 END) as q3hits, | |
SUM(CASE WHEN q.queryid = 4 and q.score > q.mediumthreshold THEN 1 END) as q4hits, | |
SUM(CASE WHEN q.queryid = 5 and q.score > q.mediumthreshold THEN 1 END) as q5hits | |
from db.table1 as interact | |
left join db.table2 as q on (interact.interactionid = q.interactionid) | |
left join db.table3 as t on (interact.interactionid = t.interactionid) | |
group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; | |
julia> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment