Сложная выборка из одной таблицы

AXP

Новичок
Сложная выборка из одной таблицы

Всем привет..

У меня возникла задача определить клиента с наибольшим кол-вом действий.

О каждом действии клиента заносится запись в таблицу cl_do
таблица содержит поля id, userid, ...

И так, я разделил задачу на 3 этапа:

1. выбрать уникальные userid
2. посчитать кол-во вхождений для каждого из userid
3. вывести максимальное значение

и написал решения:

1 SELECT DISTINCT userid FROM cl_do
2 SELECT COUNT(*) as cnt FROM cl_do WHERE userid = (1)
3 SELECT MAX(cnt) FROM (2)

Запросы собиратся в 1 сложный в обратном порядке. Но, как вы понимаете, если я вставлю во второй запрос первый, то он выдаст ошибку "мол, подзапрос вернул больше одного значения".

Прошу помощи гуру, как мне по-другому можно это сделать? Уж очень не хочется делать в несколько запросов путем php

Заранее огромное спасибо
 

zerkms

TDD infected
Команда форума
SELECT `userid` FROM `cl_do` GROUP BY `userid` ORDER BY COUNT(*) DESC LIMIT 1
 

AXP

Новичок
О_о так все намного проще чем я думал!
Спасибо огромное!

-~{}~ 01.12.09 11:41:

Осмелюсь задать еще один вопрос.

Мне нужно выбрать все уникальные значения userid из таблицы, где максимальное значение поля date в той же строке стоит в определенных пределах.

Я написал запрос, но нет возможности проверить его на большом кол-ве данных. Скажите, прав ли я или есть другой способ?

пример таблицы: cl_do
userid date
1 123213123
2 123123214
3 234234324
1 2342342342
3 3242342342
(поле date типа int)

запрос:

SELECT DISTINCT userid FROM `cl_do` WHERE `date` < 1253995200 AND `date` >= 1243368000 ORDER BY `date` DESC

-~{}~ 01.12.09 11:52:

Сам нашел ответ.
Если кому интересно:

SELECT userid, max(`date`) `date`
FROM `cl_do`
WHERE `date` < 1253995200 AND `date` >= 1243368000
BROUP BY userid
 
Сверху