Продолжаю очень приятно удивляться sqlite. Очередным поводом стали агрегирующие функции:
- есть две функции для вычисления сумм: традиционная sum() и чуть менее традиционная total() – обе суммируют не-NULL значения, но первая (в соответствии со стандартом SQL) возвращает пустой набор данных в случае, если таких значений не было, а вот вторая всегда возвращает 0.0 (что в некоторых случаях может быть весьма удобно). Кроме того, функция total() всегда возвращает double и не подвержена арифметическому переполнению;
- есть крайне полезная функция group_concat(field[, separator]), которая объединяет значения поля в одну строку. Разделитель по-умолчанию – запятая. Причем в варианте с разделителем по-умолчанию можно использовать еще и DISTINCT:
SELECT group_concat(DISTINCT user_name) FROM …. GROUP BY …
Замечу, что в SQL Server-е (горячо и искренне мною любимом) нет простого способа сделать тоже самое – только через custom aggregate (т.е. специальную сборку, которую писать/разворачивать).
В общем: чем больше смотрю - тем больше нравится.
HTH, AlexS
SQL Server куча хаков, можно например через FOR XML PATH, там в одну строку. Хотя конешно єто сложно сравнить с одним вызовом.
ОтветитьУдалитьДа, я об этом знаю (даром что забыл упомянуть). Но получить в результате XML (который надо парсить) - это немного не то, да и от разделителя после последнего элемента придется избавляться отдельно.
ОтветитьУдалить