Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчёт уникальных значений во всех столбцах, SQL-запрос составить 
:(
    Опции темы
swetik1981
Дата 15.12.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Имеется большая таблица с N столбцов, в которой через SQL осуществляются различные выборки. 
В моей программе необходимо осуществлять предпросмотр количества уникальных данных в каждом столбце по каждой сделанной пользователем выборке (а уже потом пользователь решает выводить выборку в таблицу или не выводить). 
Всё, что удалось сообразить, выглядит примерно так: 


Код

SELECT count1, count, count3, ..., countN 
FROM 
(SELECT COUNT(Field1) as count1 FROM (SELECT DISTINCT (Field1) FROM Table WHERE #more_conditions#) AS q1, " 
(SELECT COUNT(Field2) as count2 FROM (SELECT DISTINCT (Field2) FROM Table WHERE #more_conditions#) AS q2, " 
(SELECT COUNT(Field3) as count3 FROM (SELECT DISTINCT (Field3) FROM Table WHERE #more_conditions#) AS q3, " 
... 
(SELECT COUNT(FieldN) as count1 FROM (SELECT DISTINCT (FieldN) FROM Table WHERE #more_conditions#) AS qN "




где #more_conditions# - это набор условий. 

Это работает, но работает ужасно долго (таблица очень большая, полей очень много). 
Есть какие-то более приемлемые варианты? Может проблема в том, что для осуществления подсчёта уникальных значений по каждому столбцу, сначала каждый отдельный раз делается выборка из таблицы согласно #more_conditions#? Можно как-то сделать, чтобы выборка была сделана единожды, а уже в ней подсчитывалось количество значений по каждому столбцу. 
PM MAIL   Вверх
baldina
Дата 15.12.2010, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



как насчет 
Код

select count(distinct Field) from Table WHERE #more_conditions#

?
ЗЫ: поля в #more_conditions# ключи имеют?

Добавлено через 3 минуты и 46 секунд
если #more_conditions# - всегда одно и то же условие, можно
Код

select count(distinct Field1),count(distinct Field2), ... count(distinct FieldN) from Table WHERE #more_conditions#


Это сообщение отредактировал(а) baldina - 15.12.2010, 18:54
PM MAIL   Вверх
swetik1981
Дата 15.12.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 20.12.2007

Репутация: нет
Всего: нет



Все поля без ключей, все условия одинаковые. Но насколько я знаю в Access последовательность COUNT DISTINCT не поддерживается.

Это сообщение отредактировал(а) Akina - 16.12.2010, 08:55
PM MAIL   Вверх
Akina
Дата 16.12.2010, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(swetik1981 @  15.12.2010,  19:18 Найти цитируемый пост)
Можно как-то сделать, чтобы выборка была сделана единожды, а уже в ней подсчитывалось количество значений по каждому столбцу.  

Конечно... сделайте её отдельным статическим запросом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
baldina
Дата 16.12.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата

в Access последовательность COUNT DISTINCT не поддерживается

если MSJet, то - да, не поддерживается
Цитата(swetik1981 @  15.12.2010,  23:53 Найти цитируемый пост)
Все поля без ключей

индексы помогли бы.
если все #more_conditions# разные, то вынос в запрос врядли поможет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.