SQL-запрос

Gaishnik

Есть таблица с полями foo и bar.
create table t(foo integer, bar integer);
В выборке для каждого значения поля foo, представленного в таблице, должна быть одна запись. Соответствующее значение поля bar любое из возможных(если их несколько). Пример:
insert into t(foo,bar) values(1,101,111,122,132,143,15);
foo bar
1 10
1 11
1 12
2 13
2 14
3 15
Выборка
1 11
2 13
3 15
В голову не идет ничего приличнее, чем
select t_dist.foo, (select bar from t where foo=t_dist.foo limit 1) from (select distinct foo from t) as t_dist

timefim

foo, max(bar)
group by foo
?

hprt

любая или случайная? да, какая субд?

doublemother

в mysql достаточно
SELECT foo, bar FROM t GROUP BY foo

mysql> select foo,bar from t group by foo;
+------+------+
| foo | bar |
+------+------+
| 1 | 10 |
| 2 | 13 |
| 3 | 15 |
+------+------+

Gaishnik

в mysql достаточно
code:SELECT foo, bar FROM t GROUP BY foo
Клево, а я думал нужна какая-нибудь агрегирующая функция для group by.

hprt

Это НЕ клево. Не надо писать говнокод только потому, что это позволяет говносубд. В ракле и мсскл, разумеется, тоже есть недокументированные фичи, которые надо знать и стоит использовать, но тут на мой взгляд совершенно не тот случай

doublemother

Аргументируйте.

hprt

что именно...
Это НЕ клево. Не надо писать говнокод только потому, что это позволяет говносубд.

без комментариев
В ракле
Прошу прощения, букву пропустил - в Оракле. по конкретным случаям не силен, не так много работал, но уверен, что есть
в мсскл

ну, допустим, нарастающий итог
Сразу говорю, что мускуль комментировать не буду, ибо думается вопрос именно ему был посвящен. Возможности надстроек над чистым сиквелом типа PL/SQL или T-SQL - про это вообще глупо спорить, конечно, не знаю, но когда скрипт на простую вставку INSERT... VALUES... отрабатывает без ошибок, но данных не появляется (насколько я понимаю, из-за проблем кодировок - сталкивался)... ну хз, Мускуль спасет всех, особенно имея в виду отстойные бесплатные сервера типа MSSQL Express, Oracle (без поддержки) и Postgre
PS Прошу прощения, если напутал с лицензиями - не заморачивался, сам много работаю именно с MSSQL если что

AlexV769

отстойные бесплатные сервера типа MSSQL Express, Oracle (без поддержки) и Postgre
О, да!

doublemother

А еще в мускуле есть расширение "LIMIT m, n", которого, насколько я знаю, сейчас нет в postgres (не помню, как в mssql и хз, как в оракле). Так что же это - тоже говнофича в говносубд и ей пользоваться не нужно? Хуйню вы какую-то морозите. Ну ввели бы какую-нибудь функцию FIRST, чтобы была т.н. аггрегация и тот же самый эффект достигался запросом
SELECT foo, FIRST(bar) FROM t GROUP BY foo

Только нафига? Какая-то излишняя тяга к усложнению и выебонам.

lada05

Сев, вот конкретно на этот случай мы напоролись уже. Система работает с mysql и pg. Вот на pg подобный запрос не работает.

doublemother

Ну так надо уточнять, для чего конкретно пишется запрос. Во всём топике это так и не конкретизировали.

hwh2010

в постгресе есть LIMIT n OFFSET m (не договорились они, к сожалению)
агрегатные функции, умеющие пропускать все значения, начиная с некоторого момента, думаю, будут полезны. В postgresql (где можно писать свои агрегатные функции) такой возможности нет, да и про другие субд не слышал, чтобы такое было, а жаль

mbolik1

В postgresql (где можно писать свои агрегатные функции) такой возможности нет, да и про другие субд не слышал, чтобы такое было, а жаль
В Oracle можно
Оставить комментарий
Имя или ник:
Комментарий: