SQL的行列转置

这个应该是每种数据处理语言或者工具都会遇到的问题
SQL的实现,我用的是子查询的方法
打个比方
SELECT l.uid
              ,l.loan_number
              ,SELECT CASE WHEN SUM(CASE WHEN days_in_default >= 10 THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END AS default_flag  FROM installments WHERE loan_number = l.loan_number and installment_num in (1,2,3,4) 
FROM loans l
JOIN XXX
ON XXX
WHERE xxx
就是子查询中写条件的时候把下面from中某表的字段加进去做条件即可,但是我觉得这种行列转置的方法会导致速度很慢,因为这种loan_number = l.loan_number感觉上就是用到了逐条循环,因为我尝试过join的时候,写这种loan_number = l.loan_number的条件会慢很多,大表用这种条件就等于找死,但是我发现SELECT后的这种子查询似乎没有太多效率影响,需要进一步观察,要不然可能是这样一个步骤,先join出来了结果集就几千条,然后再在结果集中去遍历这些loan_number ,这种循环内的次数就比较少,也就是说有可能原理都是循环,但是SELECT后是对生成的结果集的循环,而join的时候,每一次循环就会去遍历整个大表,这样就导致效率低下!

留言

熱門文章