Re: Sort question - Fractions, Metric etc - Mailing list pgsql-general

From Bret Stern
Subject Re: Sort question - Fractions, Metric etc
Date
Msg-id 643df9bf-7378-93fb-1c8c-fe31f08ec214@machinemanagement.com
Whole thread Raw
In response to Re: Sort question - Fractions, Metric etc  ("Gogala, Mladen" <gogala.mladen@gmail.com>)
Responses Re: Sort question - Fractions, Metric etc
List pgsql-general

Here's the clip of the UI. The user selects whatever value the vendor provides for unit thickness. The data entry

people aren't comfortable converting.

At this point the sort_order column managed to do the trick....but going forward on my next

application, I can see a different approach.

Are you suggesting a function like this shellsort used with an array.

https://www.geeksforgeeks.org/shellsort/

// C++ implementation of Shell Sort

#include <iostream>
using namespace std;

/* function to sort arr using shellSort */
int shellSort(int arr[], int n)
{
    // Start with a big gap, then reduce the gap
    for (int gap = n/2; gap > 0; gap /= 2)
    {
        // Do a gapped insertion sort for this gap size.
        // The first gap elements a[0..gap-1] are already in gapped order
        // keep adding one more element until the entire array is
        // gap sorted
        for (int i = gap; i < n; i += 1)
        {
            // add a[i] to the elements that have been gap sorted
            // save a[i] in temp and make a hole at position i
            int temp = arr[i];

            // shift earlier gap-sorted elements up until the correct
            // location for a[i] is found
            int j;       
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
                arr[j] = arr[j - gap];
           
            // put temp (the original a[i]) in its correct location
            arr[j] = temp;
        }
    }
    return 0;
}

void printArray(int arr[], int n)
{
    for (int i=0; i<n; i++)
        cout << arr[i] << " ";
}

int main()
{
    int arr[] = {12, 34, 54, 2, 3}, i;
    int n = sizeof(arr)/sizeof(arr[0]);

    cout << "Array before sorting: \n";
    printArray(arr, n);

    shellSort(arr, n);

    cout << "\nArray after sorting: \n";
    printArray(arr, n);

    return 0;
}

Array before sorting:
12 34 54 2 3
Array after sorting:
2 3 12 34 54




On 8/14/2021 12:51 PM, Gogala, Mladen wrote:
I would write a stable function converting everything to metric (or imperial, depends on your preferences) and sort on the return of the function. Since unit conversion functions do not need to modify the database and should always return the same values for the same arguments, the function can be used within a query (that is the meaning of the keyword "STABLE")  and you can use it for sorting stuff

Regards

On 8/14/2021 12:14 PM, Bret Stern wrote:
I have a table with metric, imperial, fraction columns.

Is there a way to sort correctly using imperial (eg; .125, .375, .437 -> 1., 1.125)

Couldn't handle it with ORDER BY ASC, DESC args so I added a sort_column and sorted based

on those values eg; 1,2,3,4,5,6 indicating the value I need to show in which sequence.


Just curious what the pro's do

Bret


Attachment

pgsql-general by date:

Previous
From: Guyren Howe
Date:
Subject: Re: Sort question - Fractions, Metric etc
Next
From: Adrian Klaver
Date:
Subject: Re: Sort question - Fractions, Metric etc