Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > COUNT(*)


Автор: seer 30.4.2006, 10:48
Open не проходит, вылетает ошибка "AdoQuery: Field 'Код' not found.".
не пойму в чем причина..

Код

ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('SELECT COUNT(*) FROM Users');
ADOQuery.Open;
temp := ADOQuery.Fields[0].AsInteger;
ADOQuery.Close;



Аналогичная ошибка вылетает и при этом коде:

Код

ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('SELECT COUNT(НазваниеСтолбца) FROM Users');
ADOQuery.Open;
temp := ADOQuery.Fields[0].AsInteger;
ADOQuery.Close;

Автор: The Thing 30.4.2006, 13:50
поидее, должно работать.. smile  

Автор: Vit 30.4.2006, 15:40
А так?

Код

ADOQuery.SQL.Clear;
ADOQuery.SQL.Add('SELECT COUNT(*) FROM [Users]');
ADOQuery.Open;
temp := ADOQuery.Fields[0].AsInteger;
ADOQuery.Close;

Автор: vv3 2.5.2006, 12:27
А БД какая? А имена полей русские, да? А тогда... все очень плёхо... COUNT(*) - , будет давать ошибку, а COUNT("Код") - сработает... smile 

Автор: The Thing 13.5.2006, 12:47
т.е..COUNT("Код")  даст тот же результат с русскими полями, что и COUNT(*)?
А еслди поля смешанные.. есть и русские и англ.. 

Автор: bas 13.5.2006, 13:12
Цитата(The Thing @  13.5.2006,  12:47 Найти цитируемый пост)
COUNT("Код")  даст тот же результат с русскими полями, что и COUNT(*)?

COUNT(*) - выдаст обшее кол-во записей включая и содержашие NULL значения

COUNT("[Код]")- выдаст кол-во записей содержашие значения, NULL значения - отсекуться. 

Автор: Veniamin 21.5.2008, 23:58
Подскажите с COUNT пожалуйста. Можно ли как-то с помощью COUNT вывести не только количество, но и само поле, по которому выводится количество? Или как с помощью COUNT подсчитать число повторяющихся записей в таблице в одном запросе?

Автор: Данкинг 22.5.2008, 00:04
Цитата(Veniamin @  22.5.2008,  00:58 Найти цитируемый пост)
Можно ли как-то с помощью COUNT вывести не только количество, но и само поле, по которому выводится количество?


Это?
Код

select distinct pole, count (*) from base 

Автор: Veniamin 22.5.2008, 10:00
Попробовал по вашему примеру сделать на SQL Server 2000 в базе SHOP, в таблице Main, по полю product
Код

use SHOP;
select distinct product , count(*) from Main;

Query Analyzer выдаёт следующую ошибку: Column 'Main.product' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
Всё разобрался! Нужно было добавить групировку: 
Код

use SHOP;
select distinct product , count(*) as kolichestvo from Main group by product;

Но теперь возникли трудности в Delphi при работе с базой из Access, в которой поля с русскими названиями. Вот на такой запрос выводится ошибка.
Код

SELECT  DISTINCT [системная плата] COUNT(*)  FROM [главная таблица]
GROUP BY [системная плата];

Ошибка синтаксиса: (пропущен оператор) в выражении запроса '[системная плата] COUNT(*).
Попробовал по другому:
Код

SELECT  [системная плата] FROM [главная таблица] GROUP BY [системная плата] HAVING COUNT([системная плата]);

Но тогда просто выводятся все записи с поля системная плата, но не количество. :(
А вот http://www.w3schools.com/sql/func_count_distinct.asp пишут, что DISTINCT c COUNT не работают вместе в Access, только в Oracle и SQL-Server. 
Получилось следующее:
Код
SELECT [системная плата], COUNT(*)  AS количество FROM [главная таблица] 
GROUP BY [системная плата];

Такой запрос выводит название записи по указанному полю и количество таких записей, а можно ли как-то выводить количество по нескольким полям?

Автор: MetalFan 22.5.2008, 22:32
я чтото не понял, зачем в данном случае и DISTINCT и GROUP BY?

Автор: Данкинг 22.5.2008, 22:39
Цитата(MetalFan @  22.5.2008,  23:32 Найти цитируемый пост)
я чтото не понял, зачем в данном случае и DISTINCT и GROUP BY?

Да, GROUP BY тоже надо использовать, я просто забыл про него в своём примере.

Автор: MetalFan 23.5.2008, 08:07
Цитата(Данкинг @  22.5.2008,  22:39 Найти цитируемый пост)
GROUP BY тоже надо использовать

в данном случае
Цитата(Veniamin @  22.5.2008,  10:00 Найти цитируемый пост)
SELECT  DISTINCT [системная плата] COUNT(*)  FROM [главная таблица]
GROUP BY [системная плата];

DISTINCT вроде как ни к чему

Автор: Deniz 23.5.2008, 08:21
Цитата(MetalFan @  23.5.2008,  11:07 Найти цитируемый пост)
DISTINCT вроде как ни к чему 
однозначно не нужен.

Автор: Veniamin 24.5.2008, 13:04
DISTINCT может быть и не нужен, но без запятой перед COUNT-ом запрос не будет работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)