Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SQL простой вопрос не простым людям / 14 сообщений из 14, страница 1 из 1
25.05.2017, 23:28
    #39460036
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Добрый вечер/день.
Пожалуйста помогите или подскажите что искать.
Заранее огромное спасибо.

SELECT id, zip FROM address_book WHERE zip='123' or zip='456' or zip='abcd';
Результат выдает:
ID | ZIP
x | 123
x | 123
x | 123
x | 456
x | abcd
x | 123
x | 456

А нужно чтобы резльтат выдал , по sequence or condition то есть так
ID | ZIP
x | 123
x | 123
x | 123
x | 123
x | 456
x | 456
x | abcd

Главная проблема в том что нужна сортировать по последовательностю or.

P.S zip code имеет тип char
Спасибо
...
Рейтинг: 0 / 0
26.05.2017, 08:45
    #39460114
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Здравствуйте, а почему не применить обычную сортировку?
Код: plsql
1.
SELECT id, zip FROM address_book WHERE zip='123' or zip='456' or zip='abcd' order by zip;



Результат как раз будет как во втором примере. такое получается потому что символы цифр имеют меньшие ascii-коды чем буквы, т.е
Код: plsql
1.
SELECT id, zip,ascii(zip) FROM address_book WHERE zip='123' or zip='456' or zip='abcd' order by zip;
...
Рейтинг: 0 / 0
26.05.2017, 08:48
    #39460115
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Если вам понадобится какая-нибудь экзотическая сортировка, то можно порядок прописать в верхнем запросе. для вашего примера:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with sort_info as(SELECT * FROM (
    VALUES (1, '123'), (2, '456'), (3, 'abcd')
) as t (digit_number, string_number))
SELECT b.id, b.zip 
	FROM address_book b 
		join sort_info s on s.string_number=b.zip
		WHERE b.zip='123' or b.zip='456' or b.zip='abcd'
	order by s.digit_number;
...
Рейтинг: 0 / 0
26.05.2017, 08:59
    #39460124
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
VisermozЕсли вам Зачем WHERE? И вообще, проще передавать в запрос искомое как массив, тогда не нужно писать 1,2,3.
...
Рейтинг: 0 / 0
26.05.2017, 09:10
    #39460132
Visermoz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
да, полностью согласен. WHERE уже не нужно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
with sort_info as(SELECT * FROM (
    VALUES (1, '123'), (2, '456'), (3, 'abcd')
) as t (digit_number, string_number))
SELECT b.id, b.zip 
	FROM address_book b 
		join sort_info s on s.string_number=b.zip
	order by s.digit_number;



А можно посмотреть пример с массивом? использование zip=ANY(ARRAY['123','456','abcd']::text[])
...
Рейтинг: 0 / 0
26.05.2017, 10:20
    #39460209
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Visermoz,

20383485
...
Рейтинг: 0 / 0
26.05.2017, 10:40
    #39460231
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Visermoz,

Спасибо за ответ.

Order BY не прокатит так как логка в сортировке нету,
Сортировать нужна по послевд. zip=val1 zip=val2 ..и она может измениться.
...
Рейтинг: 0 / 0
26.05.2017, 10:43
    #39460235
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Visermoz,

Спасибо
...
Рейтинг: 0 / 0
26.05.2017, 10:43
    #39460236
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
p2.,

Спасибо за ответ.
...
Рейтинг: 0 / 0
26.05.2017, 11:00
    #39460247
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
p2.,

Посдкажите пожалуйста почему ругается после id,

SELECT id,zip from address_book
join unnest(ARRAY['95201','949AB20','941ED09']::text[]) WITH ORDINALITY AS (id, pos) USING (id) ORDER BY pos;

Огромное всем спасибо.
...
Рейтинг: 0 / 0
26.05.2017, 11:07
    #39460254
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Arpine_SQ,

syntax error at or near ","
...
Рейтинг: 0 / 0
26.05.2017, 11:57
    #39460301
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Arpine_SQp2.,

Посдкажите пожалуйста почему ругается после id,
Код: sql
1.
2.
3.
4.
SELECT id,zip from address_book 
join unnest(ARRAY['95201','949AB20','941ED09']::text[]) WITH ORDINALITY
 AS u (id, pos) USING (id) ORDER BY pos;
--поправил, пробуйте


Огромное всем спасибо.
...
Рейтинг: 0 / 0
26.05.2017, 14:11
    #39460446
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
qwwqArpine_SQp2.,

Посдкажите пожалуйста почему ругается после id,
Код: sql
1.
2.
3.
4.
SELECT id,zip from address_book 
join unnest(ARRAY['95201','949AB20','941ED09']::text[]) WITH ORDINALITY
 AS u (id, pos) USING (id) ORDER BY pos;
--поправил, пробуйте


Огромное всем спасибо.

Спасибо большое.
Изменил id на zip, но выдает равно два результат но данных много.
Код: sql
1.
2.
3.
SELECT id,zip from address_book 
join unnest(ARRAY['94AB25','941C9','mo']::text[]) WITH ORDINALITY
 AS u (zip, pos) USING (zip) ORDER BY pos;



Еще раз большое спасибо.
...
Рейтинг: 0 / 0
26.05.2017, 14:19
    #39460450
Arpine_SQ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL простой вопрос не простым людям
Всем спасибо друзья очень помогли.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / SQL простой вопрос не простым людям / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]