@python_beginnersЭта группа больше не существует

Страница 272 из 1885
Sergey
11.08.2016
08:07:37
Или без цен надо?

Bulat
11.08.2016
08:07:39
SELECT TOP 5 * ...
так и делаю

можно без цен

Andrey
11.08.2016
08:08:22
Здесь только через union делать. Берешь складываешь таблицу с собой, поменяв местами столбцы. А после дистинкт.

Google
Sergey
11.08.2016
08:09:09
Здесь только через union делать. Берешь складываешь таблицу с собой, поменяв местами столбцы. А после дистинкт.
Ну я предлагал этот вариант в самом начале, но он некрасивый и не оптимальный

Мало того что union так ещё и subquery

Andrey
11.08.2016
08:10:35
Мало того что union так ещё и subquery
Зачем? Если делать union, а не union all, то база сама отфильтрует повторяющиеся значения.

Bulat
11.08.2016
08:11:29
ок, спасибо сейчас попробую

https://avitotech.timepad.ru/event/352210/

Sergey
11.08.2016
08:16:22
Зачем? Если делать union, а не union all, то база сама отфильтрует повторяющиеся значения.
Я сейчас не помню как union изнутри работает, но кажется логичнее limit ещё до union сделать, чтобы база меньше данных ворочила,

Andrey
11.08.2016
08:17:20
Я сейчас не помню как union изнутри работает, но кажется логичнее limit ещё до union сделать, чтобы база меньше данных ворочила,
Если у тебя, конечно 5 записей в таблице найдётся. А так - select в таблице всегда выполняется почти в последнюю очередь.

Pavel
11.08.2016
08:40:43
а есть онлайн-место, где можно mssql потрогать? sqlfiddle только mysql умеет.

Sergey
11.08.2016
08:45:47
MariaDB [test]> select distinct least(a,b), greatest(b,a) from test limit 5; +------------+---------------+ | least(a,b) | greatest(b,a) | +------------+---------------+ | msk | ufa | | msk | spb | | spb | ufa | | kgd | msk | | kgd | spb | +------------+---------------+ 5 rows in set (0.00 sec) MariaDB [test]> select * from test; +------+------+------+ | a | b | c | +------+------+------+ | msk | ufa | 10 | | ufa | msk | 10 | | spb | msk | 10 | | spb | ufa | 20 | | kgd | msk | 15 | | kgd | spb | 17 | | ekb | nsk | 5 | | msk | vla | 50 | +------+------+------+ 8 rows in set (0.00 sec) но это mysql) mssql мне негде пощупать

с union вариант, кстати, бесполезен ибо только лишние дубликаты создает

в sqlite вместо least/greatest mix/max работают

Google
Bulat
11.08.2016
09:15:04
сейчас почитаю

Cykooz
11.08.2016
09:42:08
Можно попробовать запилить индекс по выражению (или что там в MSSQL вместо него). Т.е. надо запилить выражение, которое просто строит строку, где названия городов отсортированы.

Хотя это конечно уже не про ОРМ - придётся как то костылями выкручиваться, делать raw запросы.

Cykooz
11.08.2016
09:44:40
про орм речь вообще не идёт, не?
Изначално вообще речь почти ни о чём не шла, постепенно история развивалась, и мы узнали что это SQL, а потом, что это MSSQL ?

Под конец узнаем, что это всё надо не на Python, а в PHP ?

Pavel
11.08.2016
09:46:12
Изначално вообще речь почти ни о чём не шла, постепенно история развивалась, и мы узнали что это SQL, а потом, что это MSSQL ?
всё как в хорошем сюжете - вступление, завязка, развитие, кульминация, развязка.

Bulat
11.08.2016
09:57:14
Под конец узнаем, что это всё надо не на Python, а в PHP ?
если бы был PHP, то связка была бы вероятнее всего MYSQL + PHP

Sergey
11.08.2016
09:58:34
ну python и mssql - не такая частая связка

Bulat
11.08.2016
10:02:40
c# будет, но это уже не по моей части)

Andrew
11.08.2016
10:03:16
Bulat
11.08.2016
10:50:06
p.s c UNION ничего не получилось, т.к Москва-Уфа и Уфа-Москва есть

Zart
11.08.2016
11:00:32
MariaDB [test]> select distinct least(a,b), greatest(b,a) from test limit 5; +------------+---------------+ | least(a,b) | greatest(b,a) | +------------+---------------+ | msk | ufa | | msk | spb | | spb | ufa | | kgd | msk | | kgd | spb | +------------+---------------+ 5 rows in set (0.00 sec) MariaDB [test]> select * from test; +------+------+------+ | a | b | c | +------+------+------+ | msk | ufa | 10 | | ufa | msk | 10 | | spb | msk | 10 | | spb | ufa | 20 | | kgd | msk | 15 | | kgd | spb | 17 | | ekb | nsk | 5 | | msk | vla | 50 | +------+------+------+ 8 rows in set (0.00 sec) но это mysql) mssql мне негде пощупать
drop table test create table test (a nvarchar(20), b nvarchar(20), c int) insert into test values ('msk', 'ufa', 10), ('ufa', 'msk', 10), ('spb', 'msk', 10), ('spb', 'ufa', 20), ('kgd', 'msk', 15), ('kgd', 'spb', 17), ('ekb', 'nsk', 5), ('msk', 'vla', 50) select * from test select distinct top 5 iif(a < b, a, b), iif(a > b, a, b) from test результат: (8 row(s) affected) a b c -------------------- -------------------- ----------- msk ufa 10 ufa msk 10 spb msk 10 spb ufa 20 kgd msk 15 kgd spb 17 ekb nsk 5 msk vla 50 (8 row(s) affected) -------------------- -------------------- ekb nsk kgd msk kgd spb msk spb msk ufa (5 row(s) affected)

select @@version ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Microsoft SQL Server 2014 - 12.0.4213.0 (X64) Jun 9 2015 12:06:16 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

вообще мсскл охуенный, но не для тех ниш, где живёт my/pg

Bulat
11.08.2016
11:24:01
Msg 102, Level 15, State 1, Line 20 Incorrect syntax near '<'.

http://clip2net.com/s/3B6PMKh

ms sql 2008

Туся
11.08.2016
11:27:47
2008 вроде еще не умеет iif

используй CASE

Google
Bulat
11.08.2016
11:28:58
С MS SQL версии 2012 появилась упрощенная форма записи IIF. Она может использоваться для упрощенной записи конструкции CASE, в том случае если возвращаются только 2 значения. Конструкция IIF имеет следующий вид:

используй CASE
ага, спасибо ребята

буду пытать

Туся
11.08.2016
11:32:12
Что-то я так и не поняла смысл задачи. Наверное по диагонали читала.

Bulat
11.08.2016
11:33:51
есть А | B, не выводить B | A

Cykooz
11.08.2016
11:33:55
А ещё можно тупо завести доп. колонку, в которой хранить некое значение, которое будет одинаково в независимости от направления. В простом случае - строка с отсторироваными пунктами, чуть хитрее - хеш от этой строки. На такую колонку можно навесить индекс, и не парится со всякими сложными CASE/IFF, и даже под любой ORM взлетит если надо.

Bulat
11.08.2016
11:36:46
я изначально так делал, но показалось сложным из-за inner join

Туся
11.08.2016
11:37:40
нужно вывести уникальные направления? И почему только 5? То есть если есть москва-уфа, то уфа-москва уже не нужно, но москва-липецк нужно? Так?

Bulat
11.08.2016
11:37:55
да, 5 - это требование

Zart
11.08.2016
11:40:33
select distinct top 5 case when a < b then a else b end, case when a > b then a else b end from test

Туся
11.08.2016
11:41:08
угу

Zart
11.08.2016
11:41:22
но условия задачки дубовы

и на примерах вывода видно что результат у мускля и мс разный изза отсутствия сортировки

поэтому ограничение в 5 как-то бессмысленно

Bulat
11.08.2016
11:43:11
у меня еще условие что C нужно отсортировать по desc

Zart
11.08.2016
11:43:20
ну вот...

доим из тебя условия в час по чайной ложке

Bulat
11.08.2016
11:43:40
я думал что сам смогу, но как оказалось ..

спасибо что помогаете

Google
Zart
11.08.2016
11:44:21
select distinct top 5 iif(a < b, a, b), iif(a > b, a, b), c from test order by c desc select distinct top 5 case when a < b then a else b end, case when a > b then a else b end, c from test order by c desc

Туся
11.08.2016
11:47:32
задублировались значения
цена разная может?

Zart
11.08.2016
11:47:33
?

Bulat
11.08.2016
11:47:37
ага

Zart
11.08.2016
11:47:46
а, дистинкт же по всем трём..

Туся
11.08.2016
11:47:50
тогда понятно, distinct нашел уникальные

Zart
11.08.2016
11:48:06
тогда надо делать субселект

Sergey
11.08.2016
11:48:13
в изначальной задаче речь шла про то, что цена одинаковая

через 2 часа еще что-то новое узнаем =)

Admin
ERROR: S client not available

Zart
11.08.2016
11:48:42
если цена в обоих направлениях одинакова, тогда дубликатов не будет

Bulat
11.08.2016
11:49:22
цена разная, но есть поле с одинаковым растоянием

Туся
11.08.2016
11:49:28
ну можно без сабселекта обойтись, если групбай приделать и макс или мин цену брать

Zart
11.08.2016
11:49:41
если нет, тогда надо сделать выборку с ииф/кейс по всей таблице - это по сути нормализует её к виду где значения по возврастанию в пределах строки потом из неё уже делать дистинкт...

цена разная, но есть поле с одинаковым растоянием
там еще и поле с расстоянием есть?

Sergey
11.08.2016
11:50:29
?

Zart
11.08.2016
11:50:36
нунахуй

Pavel
11.08.2016
11:50:51
нунахуй
давай видос про "ну вас всех"

Zart
11.08.2016
11:51:30
https://coub.com/view/4ty7q

Google
Туся
11.08.2016
11:53:09
может там еще айдишники есть, который тоже выводить надо.

Johnnie
11.08.2016
11:55:16
вы до сих пор мусолите что ли))

чувак сам не знает че хочет, а вы ему тут решениями сыплете ?

Туся
11.08.2016
11:55:56
да, тяжело работать без тз

Bulat
11.08.2016
11:57:20
?

есть поля A,B,C,D

а - город, b - город, c- цена, d - расстояние

цены разные, расстояние одинаковые

задача: исключить обратное направление

сортировка по цене

Zart
11.08.2016
12:00:00
мы наблюдаем за созданием нового стартапа...

Johnnie
11.08.2016
12:00:06
?

задача: исключить обратное направление
а как понять, что оно обратное?

Pavel
11.08.2016
12:00:21
Zart
11.08.2016
12:00:41
уедь хоть куда за дешево!
напоминаю, у него было c desc т.е. задорого

Pavel
11.08.2016
12:01:16
напоминаю, у него было c desc т.е. задорого
стартап начинает с премиум-сегмента, потом выходит на массовый рынок, всё правильно.

Bulat
11.08.2016
12:01:56
с - не цена на самом деле, а популярность)

Темный
11.08.2016
12:02:51
цены разные, расстояние одинаковые
почему цены разные если расстояние одинаковое?

Туся
11.08.2016
12:03:04
потому что это не цены)

Темный
11.08.2016
12:03:52
тогда должен быть еще 1 столбец где был бы класс обслуживания поездки

иначе зачем выводить одинаковые направления с разной ценой?

достаточно 1 раз вывести самое дешевое

Страница 272 из 1885

Эта группа больше не существует Эта группа больше не существует