Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2009, 19:11   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Восклицание Count. Firebird

Добрый вечер! . Столкнулся с проблемкой. Нужна ваша помощь. Нужно посчитать количество записей и вывести результат в ячейку StringGrid-a. Вот мой код:
Код:
procedure TForm11.sButton1Click(Sender: TObject);
begin
  Form11.DBGridEh1.DataSource.DataSet.Last;

  Form11.pFIBQuery1.SQL.Clear;
  Form11.pFIBQuery1.SQL.Text:='SELECT COUNT(ID) FROM SPISOK';
  Form11.pFIBQuery1.ExecQuery;

  Form11.SG12.Cells[1,0]:=Form11.pFIBQuery1.FieldByName('ID').AsString;

end;
пишет ошибку, что не может найти поле ID. И сразу второй вопрос по этой же теме: как посчитать количество одинаковых полей?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.10.2009, 19:44   #2
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

1)
Код:
 Form11.pFIBQuery1.SQL.Clear;
  Form11.pFIBQuery1.SQL.Text:='SELECT COUNT(ID) cnt FROM SPISOK';
  Form11.pFIBQuery1.ExecQuery;

  Form11.SG12.Cells[1,0]:=Form11.pFIBQuery1.FieldByName('cnt').AsString;
2) что означает "кол-во одинаковых полей"?
soleil@mmc вне форума Ответить с цитированием
Старый 28.10.2009, 19:47   #3
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Подсчет одинаковых записей:
Код:
SELECT ID, COUNT(ID) FROM SPISOK GROUP BY ID
Ну или сколько записей разных, т.е уникальных:
Код:
SELECT COUNT(*) FROM (SELECT ID, COUNT(ID) FROM SPISOK GROUP BY ID) T1

Последний раз редактировалось Evgeniy26; 28.10.2009 в 19:52.
Evgeniy26 вне форума Ответить с цитированием
Старый 28.10.2009, 19:52   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Спасибо вам всем . soleil@mmc, а можешь пояснить что значит cnt? Ну так, для эрудиции.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 28.10.2009, 19:57   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

cnt - это псевдоним поля
можешь обозвать как хочешь
лишь бы было понятно о чем речь
soleil@mmc вне форума Ответить с цитированием
Старый 28.10.2009, 21:40   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
пишет ошибку, что не может найти поле ID.
Делается просто:
Form11.SG12.Cells[1,0]:=Form11.pFIBQuery1.Fields[0].AsString;
mihali4 вне форума Ответить с цитированием
Старый 29.10.2009, 18:50   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Странно, попробовал первый код из поста номер 3 и в результате запрос возвращает 1. Правильно ли этот результат?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.10.2009, 23:33   #8
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Код:
SELECT ID, COUNT(ID) FROM SPISOK GROUP BY ID
Выводит список записей по ID и количество данных записей в группе.

Если тебе нужно знать сколько записей в таблице, авляются повторяющимися, можно попробывать так:
Код:
SELECT SUM(cnt_count) FROM (SELECT ID, COUNT(ID) cnt_count FROM SPISOK GROUP BY ID
HAVING COUNT(ID) > 1)
Можно заменить COUNT(ID) на COUNT(ID) - 1.

Опиши, что тебе нужно подробнее.
Evgeniy26 вне форума Ответить с цитированием
Старый 30.10.2009, 07:06   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Мне нужно, чтобы в результат запроса возвращалось количество одинаковых фамилий в БД. Например, есть люди Иванов Александр и Иванов Петр, то запрос выводил бы 2, т.к. фамилия встречается два раза. Вот.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 30.10.2009 в 07:19.
artemavd вне форума Ответить с цитированием
Старый 30.10.2009, 07:26   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
artemavd
Ну вот тебе же уже сказали - группировать надо:
Код:
SELECT фамилия, COUNT(фамилия) as кол_во_фамилия FROM SPISOK GROUP BY фамилия
тогда:
Код:
with StringGrid do begin
 RowCount:=pFIBQuery1.RecordCount+1;
 for i:=1 to pFIBQuery1.RecordCount-1 do begin
// Это количество повторов
  cells[0,i]:=pFIBQuery1.FieldByName('кол-во_фамилия').AsString;
// Это сама фамилия
  cells[1,i]:=pFIBQuery1.FieldByName('фамилия').AsString;
 end;
end;
Смысл ясень?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FireBird Д'якон БД в Delphi 2 04.12.2008 11:15
FireBird 1.5.4 Nikola__ БД в Delphi 2 17.11.2008 14:42
Использование атрибутов count и sum Dianaa Помощь студентам 3 16.09.2008 22:51
count(*) antoniosm БД в Delphi 9 12.09.2007 13:06
функция запроса COUNT Таня84 БД в Delphi 1 10.06.2007 15:49