[SQL] Ви будете смеяться, но тоже написать запросик

uncle17

есть таблица мыл.
Нужно получить список доменов этих мыл, отсортированных по количеству мыл в оном домене.
Ессно, на любом ЯП это делается в два плевка. А чисто одним запросом можно?
З.Ы. Ну и рядом с доменом бы неплохо количество мыл написать

Boris1980

:) Ну как-то так. "Вычисли" домен и сгруппируй по нему
select
substr(t.email, instr(t.email, '@', 1 length(t.email
count(*)
from table t
group by substr(t.email, instr(t.email, '@', 1 length(t.emaiil)
order by count(*)

uncle17

не... не нравится маескуелю слово "instr".

pitrik2

не... не нравится маескуелю слово "instr".
гонишь?

Sharp

Тогда уж лучше так
 select
substr(t.email, instr(t.email, '@', 1 length(t.email as domain,
count(*)
from table t
group by domain
order by count(*)

Boris1980

Замени на "поиск символа в строке" (instr - это Oracle).

uncle17

у меня мускл 4.1. Может, поэтому?

pitrik2

group by domain
правда что ли?
сначала же группировка делается а уже потом выборка

pitrik2

у меня мускл 4.1. Может, поэтому?
ну блин
в гугле ткни на первую же ссылку
там написано аж про 3.23

Boris1980

Найди десять отличий ?
Или ты предлагаешь использовать тег "code" ?

uncle17

да не люблю я гугл. Всё в нем по-еврейски... Вот и не увидел сначала.
Не, не нравятся запросы...

pitrik2

Не, не нравятся запросы...
1) ты его подправил? а то у робинзона там скобки криво расставлены
2) мыскуль вообще умеет группировать по выражению?

Boris1980

Ага, тоже усомнился.

Boris1980

Ну направление я верно задал. Скобку в группировке упустил...

nekaya

в конце запроса припиши " desc", насколько я понял тебе именно так нужно.

nekaya

а зачем там length(t.email)?
это же явно больше чем надо, только с лишними вычислениями.
лучше записать туда константу, не меньшую чем возвращаемое следующим запросом значение:
select max(length(t.email from t
либо тупо равную длине поля.
Не знаю кук в мускуле, но в некоторых реализациях третий аргумент вообще не обязательный и по умолчанию функция возвращает строку до конца.

Boris1980

либо тупо равную длине поля.

Когда писал, думал о такой константе. Если б написал, нашелся бы форумчанин, который это отметил.
Для него это разовая операция, и не особо трудоемкая вроде. Любой вариант сойдет.

state7401281

> 2) мыскуль вообще умеет группировать по выражению?
даже по "синониму" умеет, т.е. select f(x) as domain ....... group by domain - в mysql будет работать

evgarus

instr это древнейшая функция MySQL :)
а вообще неплохо иногда заглядывать в документацию от разработчика.
http://dev.mysql.com/doc/refman/4.1/en/string-functions.html...

evgarus

это называется алиас! :grin:

state7401281

точно, не мог вспомнить
Оставить комментарий
Имя или ник:
Комментарий: