GD Star Rating
loading...
loading...
Эй парни.
Я либо туплю дико, либо…
В общем, задача вот какая. Есть таблица с колонками, скажем, col1, col2, …, colN.
В них содержатся различные значения, ну например “a”, “b”, … “n”.
Мне нужно посчитать, сколько всего различных значений содержится в каждой колонке, и желательно за один проход.
Пока не придумал ничего умнее, чем
select SUM(col1 = ‘a’), …, SUM(col1 = ‘n’), … SUM(colN = ‘a’), …
Полагаю, есть способ лучше?
select col1, count(*) from table group by col1
как говорил мой преподаватель по физике, “а ну-ка N равно восемьдесят”.
Колонок много, в этом проблема.
select colN, count(*) from table group by colN
и так N раз? )
потребуется N проходов для N колонок
А значения во всех колонках одинаковые?
Или в каждой колонке свой набор значений?
Дык это. Тебе нужно количество значений ‘a’ в колонке 1, количество значений ‘b’ в колонке 1, …, количество значений ‘z’ в колонке N. Таким образом, тебе нужен каждый счётчик из написанного тобой селекта. Значит, твоё решение уже является правильным.
Только я не помню, будет ли оно выполняться за один проход. А так всё уже идеально.
в каждой свой набор. Скажем, в col1 могут быть цифры, в col2 – буквы итд.
ну значит твоё решение единственно верное из ручных.
Из более-менее автоматических верно решение , вопрос только в том, как сделать его однопроходным.
А вообще, я представил себе таблицу из 1200 колонок и 580 миллионов записей и подумал, что либо процедура, которая курсором проходит, либо дополнительная табличка, обновляемая через триггер, например. Или типа того. Или вообще, если условия позволяют, выгребать всё и программно подсчитывать. Может быть раз в час, например. В общем, варианты возможны.
вот да, тоже про БДшные функции думаю. К сожалению, внутренний программинг у MySQL достаточно убогий, с постгресом было бы проще. Видимо, действительно буду выгребать и считать на стороне.
Ок, идея понятна. По крайней мере, если я и туплю, то не “дико”.
SELECT COUNT(DISTINCT `col0`), COUNT(DISTINCT `col1`) FROM `table`