Помогите с SQL-запросом.

Labutin

Новичок
Помогите с SQL-запросом.

Дано:
Таблица с одной колонкой, где данные повторяются.
Необходимо:
Хочется получить таблицу с подсчетом кол-ва повторений каждого элемента.
Пример:
Дано:
1
2
2
1
1
3
4
1
Нужно:
1 4 (1 встречается 4 раза)
2 2 (2 встречается 2 раза)
3 1 (3 встречается 1 раз)
4 1 (4 встречается 1 раз)
Результат должен быть отсортирован по кол-ву повторений, т.е. по второму столбцу.
Как можно выкрутиться одним запросом?
Можно, в принципе, и не одним, но чтобы работало как можно быстрее.
 

Сергей123

Новичок
Нужно использовать GROUP BY по первому столбцу. Ещё понадобится функция COUNT и сортировка ORDER BY ... DESC.
Или нужно готовое решение?
 

Labutin

Новичок
Забыл написать.
Интересуют варианты, которые будут работать в MySQL 3 и MySQL 4
Так интересны вырианты, которые будут работать только в 4-й версии MySQL.

-~{}~ 16.12.05 13:16:

Бресь Сергей
Если не сложно, то можно пример запроса?

-~{}~ 16.12.05 13:22:

SELECT a, COUNT(*) as b FROM t GROUP BY a ORDER BY b DESC
сам дошел до решения после подсказки
Спасибо.

-~{}~ 16.12.05 13:23:

Только остается открытым вопрос - это самое оптимальное решение или можно что-то лучше придумать?
 

Labutin

Новичок
Сложняем задачу :)
Теперь у нас данные в двух таблицах (одинаковых по структуре, т.е. с одним столбцом).
Нужно получить таблицу с подсчетом кол-ва повторений каждого элемента в обеих таблицах. Для этого отлично подходит UNION. Но проблема в том, что задачу нужно решить на MySQL 3.23, где UNION еще нет :(
Решение влоб - создать временную таблицу, в которую скопировать данные из двух и применить решение к одной таблице. Но это не есть хорошо, т.к. таблицы достаточно большие :(
Какие еще могут быть варианты?
 

chira

Новичок
Labutin

как часто нужно получать "кол-во повторений каждого элемента в обеих таблицах".
на сколько важна актуальность данных, например данные подсчитанные час назад можно принять за истину...
с какой интенсивностью заполняются эти таблицы?
сколько уникальных значений элементов в таблицах и сколько всего записей?
 

Labutin

Новичок
chira
Результат нужен два-три раза в день (пользователь хочет посмотреть отчет)
В принципе, данные часовой давности можно считать актуальными.
Первая таблица заполняется примерно по 100 записей в час. Вторая по 500 записей в час.
Уникальных значений в таблицах около 100. Всего в сумме около 1 миллиона.
 

chira

Новичок
Labutin

можно сделать отдельную таблицу в которую будут вноситься суммарные данные по каждой таблице после каждого инсерта в основную таблицу.
всё будет летать ...
 

Labutin

Новичок
chira
Согласен.
Но я пошел немного другим путем.
Сделал
SELECT a, COUNT(*) as b FROM t GROUP BY a ORDER BY b DESC
к обеим таблицам. Результат слил в один массив и уже средствами PHP его отсиртировал (благо размер небольшой).

-~{}~ 19.12.05 11:30:

Теперь у меня такой вопрос. Есть таблица:
a b c
1 1 1
2 2 1
3 5 1
1 3 2
2 2 2
3 1 2
Запрос SELECT a FROM `tmp` GROUP BY c сворачивает таблицу по c и выдает две строки с 1. Как изменить логику выбора значения 'a'? Мне нужно, чтобы выбиралось то 'a', где 'b' имеет максимальное значение при сворачивании по 'c'.
Т.е. там где c=1 выбирается максимальное b=5 и первый результат a=3. Там где с=2, максимальное b=3 и тогда а=1
Т.о. результатом должно стать:
a
3
1
Как такого добиться, чтобы это работало в MySQL 3.23 ?
 
Сверху