GD Star Rating
loading...

Эй парни.
Я либо туплю дико, либо…

В общем, задача вот какая. Есть таблица с колонками, скажем, col1, col2, …, colN.
В них содержатся различные значения, ну например “a”, “b”, … “n”.
Мне нужно посчитать, сколько всего различных значений содержится в каждой колонке, и желательно за один проход.

Пока не придумал ничего умнее, чем
select SUM(col1 = ‘a’), …, SUM(col1 = ‘n’), … SUM(colN = ‘a’), …

Полагаю, есть способ лучше?

Tagged with →  

11 Responses to задача

  1. Auron:

    select col1, count(*) from table group by col1

  2. HprVelo:

    как говорил мой преподаватель по физике, “а ну-ка N равно восемьдесят”.
    Колонок много, в этом проблема.

  3. Auron:

    select colN, count(*) from table group by colN

  4. HprVelo:

    и так N раз? )

  5. AmtSport:

    потребуется N проходов для N колонок

  6. AmtSport:

    А значения во всех колонках одинаковые?
    Или в каждой колонке свой набор значений?

  7. AmtSport:

    Дык это. Тебе нужно количество значений ‘a’ в колонке 1, количество значений ‘b’ в колонке 1, …, количество значений ‘z’ в колонке N. Таким образом, тебе нужен каждый счётчик из написанного тобой селекта. Значит, твоё решение уже является правильным.
    Только я не помню, будет ли оно выполняться за один проход. А так всё уже идеально.

  8. HprVelo:

    в каждой свой набор. Скажем, в col1 могут быть цифры, в col2 – буквы итд.

  9. AmtSport:

    ну значит твоё решение единственно верное из ручных.
    Из более-менее автоматических верно решение , вопрос только в том, как сделать его однопроходным.

    А вообще, я представил себе таблицу из 1200 колонок и 580 миллионов записей и подумал, что либо процедура, которая курсором проходит, либо дополнительная табличка, обновляемая через триггер, например. Или типа того. Или вообще, если условия позволяют, выгребать всё и программно подсчитывать. Может быть раз в час, например. В общем, варианты возможны.

  10. HprVelo:

    вот да, тоже про БДшные функции думаю. К сожалению, внутренний программинг у MySQL достаточно убогий, с постгресом было бы проще. Видимо, действительно буду выгребать и считать на стороне.

    Ок, идея понятна. По крайней мере, если я и туплю, то не “дико”.

  11. Rotoff:

    SELECT COUNT(DISTINCT `col0`), COUNT(DISTINCT `col1`) FROM `table`

Добавить комментарий