Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.10;
Скачать: CL | DM;

Вниз

Как подсчитать количество уникальных записей в таблице?   Найти похожие ветки 

 
grusty   (2004-01-17 16:20) [0]

Уважаемые, подскажите!

Как подсчитать количество уникальных записей в таблице?
Пытаюсь выполнить запрос:

with Query do begin
if Active then Close;
SQL.Text:="SELECT COUNT(DISTINCT Kod) FROM Table";
Open;
end;

где:
Kod - поле в таблице Table;
Table - таблица в базе Access;
однако появляется "Ошибка синтаксиса (пропущен оператор)...".
Что я не так делаю? Если такой синтаксис не допустим для Access, то есть ли другие варианты, кроме как перебор записей?


 
sniknik ©   (2004-01-17 18:25) [1]

это из хелпа аксесс
...

Хотя аргумент выражение допускает выполнение вычислений над полем, функция Count возвращает просто количество записей. Это значение не зависит от того, какие данные содержатся в этих записях.

Функция Count не подсчитывает записи со значениями Null, если только аргумент выражение не содержит подстановочный знак звездочки (*). Если используются знаки звездочки, функция Count вычисляет общее количество записей, включая те, которые содержат пустые поля. Функция Count(*) работает значительно быстрее функции Count([Имя столбца]). Не следует заключать символ звездочки в прямые кавычки (" "). В следующем примере вычисляется количество записей в таблице «Заказы»:

SELECT Count(*)

AS ЧислоЗаказов FROM Заказы;

Если в аргументе выражение задано несколько полей, функция Count подсчитывает запись только в том случае, если хотя бы одно из полей не содержит значение Null. Если все указанные поля содержат значения Null, запись не подсчитывается. Для разделения имен полей используется символ (&). В следующем примере демонстрируется способ ограничения числа записей теми записями, для которых поле «ДатаИсполнения» или поле «СтоимостьДоставки» не содержат пустые значения:

SELECT

Count("ДатаИсполнения & СтоимостьДоставки")

AS [Not Null] FROM Заказы;

------------------------------------

уникальные значения
для одного
SELECT COUNT(*) FROM Table WHERE Kod = "значение"
для всех
SELECT Kod, COUNT(*) AS [Kol-vo] FROM Table GROUP BY Kod


 
Johnmen ©   (2004-01-17 18:35) [2]

>sniknik © (17.01.04 18:25)

Нет. Не так. Ему нужно количество неповторяющихся значений,
а не количество каждого значения...
Могу лишь сказать, что запрос автора с т.з. стандарта SQL абсолютно верен.


 
sniknik ©   (2004-01-17 18:47) [3]

> Ему нужно количество неповторяющихся значений,
а..., тогда я не так понял

> Могу лишь сказать, что запрос автора с т.з. стандарта SQL абсолютно верен.
может быть,
в аксесе можно так
SELECT COUNT(*) AS [Kol-vo] FROM (SELECT DISTINCT Kod FROM Table)


 
grusty   (2004-01-18 11:24) [4]

-->sniknik

Можно и так. Я же вышел из положения следующим образом:

with Query do begin
if Active then Close;
SQL.Text:="SELECT DISTINCT Kod FROM Table";
Open;
end;

Число Query.RecordCount и есть количество неповторяющихся записей.

Спасибо всем!


 
sniknik ©   (2004-01-18 11:57) [5]

проверь скорость выполнения, только возьми табличку побольше и с большим количеством уникальных. ставлю на то что запрос из [3] отработает быстрее.
в общем если скорость важна и от запроса нужно только количество, то лутше пользоваться им ([3]).



Страницы: 1 вся ветка

Текущий архив: 2004.02.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
3-29236
Элина
2004-01-19 14:45
2004.02.10
Изменение параметоров BDE программно


1-29400
Navi
2004-01-20 18:08
2004.02.10
Нескролируемые колонки в StringGrid-е


14-29574
Petr V. Abramov
2004-01-19 21:03
2004.02.10
Было бы смешно...


14-29612
New
2004-01-19 12:12
2004.02.10
Дневник кота


3-29257
The X
2004-01-13 15:52
2004.02.10
Itnvalid variant type conversion