В принципе, является ли приведенный ниже код эффективным (если я не могу использовать переменные @ в MonetDB), или он будет вызывать подзапросы более одного раза каждый?
CREATE VIEW sys.share26cuts_2007 (peorglopnr,share26cuts_2007) AS (
SELECT peorglopnr, CASE WHEN share26_2007 < (SELECT QUANTILE(share26_2007,0.25) FROM sys.share26_2007) THEN 1
WHEN share26_2007 < (SELECT QUANTILE(share26_2007,0.5) FROM sys.share26_2007) THEN 2
WHEN share26_2007 < (SELECT QUANTILE(share26_2007,0.75) FROM sys.share26_2007) THEN 3
ELSE 4 END AS share26cuts_2007
FROM sys.share26_2007
);
Я бы тоже не стал использовать определяемую пользователем функцию, хотя это возникло в других вопросах.
CASE
будет выполняться один раз для каждой строки в SQLServer, но я понятия не имею о monetdb. - person user2989408   schedule 12.06.2014QUANTILE()
в таблице, чтобы они не вычислялись несколько раз. - person Hart CO   schedule 12.06.2014