выбрать пользователей с самым популярным именем - именем, котрое встречаеться чаще всего (name) -вывести все данные для каждого юзера. пока что получилось только вывести найболее часто встречающееся и кол-во раз ): А как всех?
Спустя 10 минут, 22 секунды (22.12.2009 - 16:50) DedMorozzz написал(а):
Может быть можно было и проще, но сделал так:
SELECT *
FROM `tblusers`
WHERE fname = (
SELECT fname
FROM tblusers
GROUP BY fname
HAVING count( * ) = (
SELECT max( cf_num )
FROM (
SELECT fname, count( * ) AS cf_num
FROM tblusers
GROUP BY fname ) t1 )
)
SELECT *
FROM `tblusers`
WHERE fname = (
SELECT fname
FROM tblusers
GROUP BY fname
HAVING count( * ) = (
SELECT max( cf_num )
FROM (
SELECT fname, count( * ) AS cf_num
FROM tblusers
GROUP BY fname ) t1 )
)
Спустя 36 секунд (22.12.2009 - 16:50) glock18 написал(а):
DedMorozzz
Конкретнее поставь задачу. Мне мало что понятно из этого.
Конкретнее поставь задачу. Мне мало что понятно из этого.
Спустя 22 минуты, 58 секунд (22.12.2009 - 17:13) DedMorozzz написал(а):
Задача была такова - из Таблицы выбрать все поля в которых поле "fname" встречаеться найбольшее количество раз. Вот как отпимизировал:
SELECT * FROM tblusers
WHERE fname=(SELECT fname FROM (SELECT *,count( * ) AS kol_vo
FROM tblusers
GROUP BY fname
ORDER BY kol_vo
DESC LIMIT 1 ) as t1)
SELECT * FROM tblusers
WHERE fname=(SELECT fname FROM (SELECT *,count( * ) AS kol_vo
FROM tblusers
GROUP BY fname
ORDER BY kol_vo
DESC LIMIT 1 ) as t1)
Спустя 4 минуты, 35 секунд (22.12.2009 - 17:18) waldicom написал(а):
SELECT *, count(*) as amount FROM `table` GROUP BY `name` ORDER BY amount DESC
?
Спустя 3 минуты, 37 секунд (22.12.2009 - 17:21) DedMorozzz написал(а):
Не)) Так выдаёт ВСЮ(!) таблицу + поле эмаунт в котором показываеться сколько раз встречаеться. Необходимо вывести только тех, кто встречаеться чаще всего и без доп полей.
Выше указал уже как сделать. Врядли проще получиться...
Выше указал уже как сделать. Врядли проще получиться...
Спустя 31 минута, 12 секунд (22.12.2009 - 17:53) waldicom написал(а):
Цитата (DedMorozzz @ 22.12.2009 - 16:13) |
SELECT * FROM tblusers WHERE fname=(SELECT fname FROM (SELECT *,count( * ) AS kol_vo FROM tblusers GROUP BY fname ORDER BY kol_vo DESC LIMIT 1 ) as t1) |
Это простой запрос?!?! С двумя вложенными подзапросами? Гм гм...
Спустя 1 час, 34 минуты, 7 секунд (22.12.2009 - 19:27) glock18 написал(а):
DedMorozzz
проще может не получится, но лучше можно точно. вообще задача при такой постановке подразумевает два filesort'а. если таблица большая будет, то это капец. для count() необходимо ввести поле в таблицу, чтобы не рассчитывать его каждый раз + индекс, чтобы избегать каждый раз сортировки. после этого и запрос облегчить можно будет неплохо.
проще может не получится, но лучше можно точно. вообще задача при такой постановке подразумевает два filesort'а. если таблица большая будет, то это капец. для count() необходимо ввести поле в таблицу, чтобы не рассчитывать его каждый раз + индекс, чтобы избегать каждый раз сортировки. после этого и запрос облегчить можно будет неплохо.
_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться