metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-28 11:45 pm

Кложурь это новый SQL или "нам гамон"

http://justy-tylor.livejournal.com/205808.html?thread=873456#t873456 "глупо ожидать удобства от древнего бухгалтерского DSL в двадцать первом веке." - это про SQL, который изначально вообще задумывался вроде для разного рода бухгалтеров и экономистов, но они "не осилили".

Я вот думаю, что Clojure на роль бухгалтерского DSL подходит гораздо лучше :)

[identity profile] bydl0coder.livejournal.com 2013-04-29 10:58 am (UTC)(link)
можно ли без извратов получить от базы такое:

month | item |amount
---------------------
01.13 | guns | 100
01.13 | butter | 150
null | null | 250
02.13 | guns | 50
02.13 | butter | 70
null | null | 120

[identity profile] nivanych.livejournal.com 2013-04-29 11:08 am (UTC)(link)
Смотря что вы считаете извратами.
Можно получить при помощи SQL.
http://www.postgresql.org/docs/devel/static/tutorial-window.html

[identity profile] bydl0coder.livejournal.com 2013-04-29 11:11 am (UTC)(link)
Получить, да не то.

[identity profile] nivanych.livejournal.com 2013-04-29 11:23 am (UTC)(link)
Ога. Не то. Там цЫферки другие написаны.
Надо-то что? Группировки типа "по неделям и итог по каждому месяцу"?
И в каком именно SQL? Поцгрес подойдёт?
http://www.postgresql.org/docs/devel/static/functions-datetime.html
Возможно, из приведённой вами гипотетической выборки из базы и можно догадаться в точности, что именно вам нужно, но я этого делать не буду.

[identity profile] bydl0coder.livejournal.com 2013-04-29 03:56 pm (UTC)(link)
Циферки те, да не там.

[identity profile] metaclass.livejournal.com 2013-04-29 11:15 am (UTC)(link)
Можно. Что-то вроде
select * from
(select month,1 k, item, sum(amount) from Items
group by 1,2,3
union
select month,2 k, '', sum(amount) from items
group by 1,2,3
) order by month,k

ну или помудрить с CTE, чтобы два раза не вставать к основной таблице.

[identity profile] bydl0coder.livejournal.com 2013-04-29 04:24 pm (UTC)(link)
и так двенадцать раз, ага.

[identity profile] metaclass.livejournal.com 2013-04-29 06:22 pm (UTC)(link)
см, ссылку на fiddle

[identity profile] bydl0coder.livejournal.com 2013-04-29 07:07 pm (UTC)(link)
Вот я лох. Но проблемы видны, в общем.

[identity profile] metaclass.livejournal.com 2013-04-29 07:13 pm (UTC)(link)
Да, если требования чуть сложнее - sql превращается в тыкву.
В итоге, один запрос с аггрегацией я делаю на SQL а всю постобработку типа "показать итоги до, после, сверху, сбоку, спереди и сзади" - на Clojure.

[identity profile] bydl0coder.livejournal.com 2013-04-29 09:48 pm (UTC)(link)
Я тоже так делаю, но в сишарпе получаются ебанутейшие типы, да и в рубях тоже не особо приятно map'ы разбирать. В Clojure какой-то крутой синстаксис для мапов, насколько я понимаю.