Arhn - архитектура программирования

Xcode, iphone, Sqlite, нужна функция знака для группировки?

Мне нужна функция sql sign для моей группы по запросу, чтобы группировать положительные и отрицательные суммы.

К сожалению, sqlite не включает его.

Может ли кто-нибудь предложить обходной путь? или как добавить его для работы с платформой libsqlite3.dylib, используемой в xcode?

Мой запрос довольно сложный

select fcid, sum(price), (select sum(price) from tmp b where ((b.due < a.due) 
or ((b.due = a.due) and (b.pid <= a.pid)))) as accumulated_price from tmp a 
where due >= '2011-01-25' and due < '2011-02-24' and price <> 0 group by fcid 
order by due, pid;

То, что я пытаюсь сделать, это группа на sign(price), поэтому я получаю два результата: отрицательное значение и положительное значение. Они будут представлять общие расходы и общий доход.

Хотелось бы добавить эти теги (но мне не разрешено создавать новые libsqlite3.dylib libsqlite3)

25.01.2011

Ответы:


1

Не знаю, лучший ли это выбор, но вы можете попробовать:

select your_val > 0, sum(aggregated_value)
  from your_table
 group by your_val > 0;

Таким образом, у вас должно быть 0 для нулевых или отрицательных значений и 1 для положительных значений.

ОБНОВЛЕНИЕ: если fcid - это поле, для которого вам нужен знак, вы можете попробовать:

select fcid > 0, sum(price), 
       (
         select sum(price) 
           from tmp b
          where ((b.due < a.due) or ((b.due = a.due) and (b.pid <= a.pid)))
       ) as accumulated_price 
  from tmp a 
 where due >= '2011-01-25' 
   and due < '2011-02-24' 
   and price <> 0 
 group by fcid > 0;

Обратите внимание, что ваше предложение order by бесполезно, поскольку вы все равно группируете свои результаты.

25.01.2011
  • Как в этом запросе будут оцениваться строки, где your_val имеет значение NULL? 25.01.2011
  • Будет третья строка: NULL | сумма (агрегированное_значение) 25.01.2011
  • Смотрите мое редактирование, мой запрос довольно сложный, не знаю, как включить их 25.01.2011
  • @Jules: Для какого поля вам нужен знак? 25.01.2011
  • Я бы использовал знак цены, чтобы сгруппировать по расходам или доходам. 25.01.2011

  • 2

    Вы должны просто создать свою собственную функцию знака. См. раздел Создание или переопределение функций SQL.

    Зарегистрируйте функцию, используя sqlite3_create_function:

    sqlite3_create_function( db, "sign", 1, SQLITE_ANY, NULL, signFunc,
                             NULL, NULL);
    

    Затем реализуйте signFunc на C.

    static void signFunc(sqlite3_context *c, int argCount, sqlite3_value **args) {
        if ( argCount != 1 ) {
            sqlite3_result_null( c );
            return;
        }
    
        switch ( sqlite3_value_type( args[0] ) ) {
            case SQLITE_INTEGER: {
                sqlite3_int64 asInt = sqlite3_value_int64( args[0] );
                sqlite3_int64 sign = asInt < 0 ? -1 : (asInt > 0 ? 1 : 0);
                sqlite3_result_int64( c, sign );
                break;
            }
            case SQLITE_FLOAT: {
                double asDouble = sqlite3_value_double( args[0] );
                sqlite3_int64 sign = asDouble < 0 ? -1 : (asDouble > 0 ? 1 : 0);
                sqlite3_result_double( c, sign );
                break;
            }
            case SQLITE_NULL:
            default: {
                sqlite3_result_null( c );
                break;
            }
        }
    }
    
    25.01.2011
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..