Znaki specjalne w tabelach "<", ">" a klauzula ORDER BY.

0

Dzień dobry, w jaki sposób mogę posortować dane z tabel po tego typu wartościach? na przykład 10<200, 200<250>220

0
SELECT SUM(FAKTURY.BRUTTO), FAKTURY.MOUTH, table1.name, table1.group, MIASTA.SIZE
FROM table1
INNER JOIN FAKTURY
ON FAKTURY.user_id = table1.id
INNER JOIN MIASTA
ON MIASTA.id = table1.city_id
WHERE FAKTURY.MOUTH = 'WRZESIEŃ'
GROUP BY table1.group
ORDER BY SIGN(MIASTA.SIZE) ASC

gdzie MIASTA.SIZE mają właśnie wartości jak w temacie.

0

Prosta odpowiedź: nie specjalnie się da.

Dłuższa odpowiedź: da się, ale musisz je sprowadzić do jakiegoś wspólnego i porównywalnego formatu, np. enuma [small, medium, big] i wtedy sortować.

0

Są to wartości określające wielkość miast, mam posortować to po właśnie tych wielkościach.

1

ale to NIE SĄ sortowalne wartości! Np. 10<99 będzie za 100<199. Musisz to zamienić na coś co się da sortować, np. liczb całkowite od 1 do x, gdzie x to liczba różnych "wielkości" miast. Możesz to zrobić albo dodając dodatkową kolumnę w tabeli i ją wypełniając odpowiednio (np. trigger) albo "w locie" tak

...
ORDER BY
  case 
    when MIASTA.SIZE = '10<200' then 1
    when MIASTA.SIZE = '200<250>220' then 2
    ....
    else 999
  end
0
abrakadaber napisał(a):

ale to NIE SĄ sortowalne wartości! Np. 10<99 będzie za 100<199. Musisz to zamienić na coś co się da sortować, np. liczb całkowite od 1 do x, gdzie x to liczba różnych "wielkości" miast. Możesz to zrobić albo dodając dodatkową kolumnę w tabeli i ją wypełniając odpowiednio (np. trigger) albo "w locie" tak

...
ORDER BY
  case 
    when MIASTA.SIZE = '10<200' then 1
    when MIASTA.SIZE = '200<250>220' then 2
    ....
    else 999
  end

Dziękuje to rozwiązuje mój problem i poszerza wiedzę.

0

dzięki za informacje

1 użytkowników online, w tym zalogowanych: 0, gości: 1