Имя: Пароль:
1C
1С v8
Непонятки с КОЛИЧЕСТВО() в запросе
,
0 andrewks
 
19.11.11
13:06
читаю ЖКК (в актуальной справке платформы то же самое):

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

Агрегатная функция КОЛИЧЕСТВО
Функция исмеет следующий синтаксис:

КОЛИЧЕСТВО([РАЗЛИЧНЫЕ] <Выражение>)

Функция подсчитывает количество значений поля, указанного в параметре, попавших в выборку. В отличие от других агрегатных функций функция КОЛИЧЕСТВО допускает три способа использования.

Во-первых, функция позволяет подсчитать количество значений указанного поля, не равных NULL.
Во-вторых, функция позволяет подсчитать количество различных значений указанного поля, не равных NULL. Для этого перед спецификацией поля надо указать ключевое слово РАЗЛИЧНЫЕ.
В-третьих, функция позволяет подсчитать количество строк в результате запроса. Для этого в качестве параметра функции надо указать звездочку "*".
В качестве параметра функции можно указывать выражения, содержащие значения любого типа. Не может применяться к выражениям с типом ХранилищеЗначения и Строкам неограниченной длины.

Пример:
ВЫБРАТЬ
  КОЛИЧЕСТВО (*) КАК Всего,
  КОЛИЧЕСТВО (РАЗЛИЧНЫЕ Накладная.Номенклатура) КАК Разные

ИЗ
  Документ.РасходнаяНакладная.Состав КАК Накладная

Результат запроса:

Всего   Разные

24           8

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

на практике же получается совсем не так, как описано, а так, как в примере (т.е. пример полностью не соответствует описанию).
конкретно вопрос про КОЛИЧЕСТВО(*)
при указании данной агрегатной функции в поле запроса вычисляется количество строк ДО группировок, т.е. никаким "количеством строк в результате запроса" даже не пахнет.

при указании в поле итогов (кроме общих) - тут уже количество строк в данной группировке (без учёта итоговых)
при указании в поле общих итогов  - вот здесь и получаем количество строк в результате запроса (без учёта итоговых)


это я чего-то недопонимаю, или документация топорно составлена?
1 rs_trade
 
19.11.11
13:10
(0) читай BOL. будь мужиком блеать!
2 Defender aka LINN
 
19.11.11
13:15
"при указании данной агрегатной функции в поле запроса вычисляется количество строк ДО группировок, т.е. никаким "количеством строк в результате запроса" даже не пахнет." - переведи этот бред на русский язык.
3 andrewks
 
19.11.11
13:15
(1) с BOL всё понятно. вопрос про документацию от 1ЦЭ
4 andrewks
 
19.11.11
13:16
(2) отчего же бред?  это означает, что если группировка была составлена из двух строк, то результат будет = 2, а не 1,  если из трёх, соответственно, = 3
5 rs_trade
 
19.11.11
13:22
(3) да вроде все верно написано.
6 rs_trade
 
19.11.11
13:24
(4) если у тебя КОЛИЧЕСТВО (РАЗЛИЧНЫЕ ... то группировка составленная из двух строк может быть равна 1. внезапно.
7 andrewks
 
19.11.11
13:24
(5)

В-третьих, функция позволяет подсчитать количество строк в результате запроса. Для этого в качестве параметра функции надо указать звездочку "*".

Результат запроса:

Всего   Разные

24           8


тут в результате запроса 24 строки?
8 andrewks
 
19.11.11
13:25
(6) про РАЗЛИЧНЫЕ я не задавал вопрос. я вопрошаю _конкретно_ про (*)
9 rs_trade
 
19.11.11
13:28
(7) По моему у тебя проблемы с интерпритацией этой инфы. в тч накладной 24 строки, это следует из результата запроса
10 andrewks
 
19.11.11
13:30
(9) лично у меня проблем с интерпретацией этой инфы нет. я-то понял, что было просмотрено 24 записи, но в результате запроса _одна_ строка
11 rs_trade
 
19.11.11
13:33
(10) так функция то, агрегатная
12 rs_trade
 
19.11.11
13:35
+(11) тот же GROUP BY, но с подсчетом значений столбца
13 andrewks
 
19.11.11
13:37
короче, я так понял, что никто, кроме меня, не видит разницы между количеством строк ДО и ПОСЛЕ группировок
14 rs_trade
 
19.11.11
13:40
(13) видимо да. не читайте до обеда советских газет и ЖКК
15 andrewks
 
19.11.11
13:42
по-русски говоря, эта агрегатная функция в поле запроса и в поле итогов опирается на разные данные
16 rs_trade
 
19.11.11
13:46
(15) пример с итогами можно? что не понятно?
17 andrewks
 
19.11.11
13:52
Запрос:


   | select
   |  ПрихНакл.Ссылка
   | ,ПрихНакл.Склад
   | ,ПрихНаклМат.Материал
   | ,count(*) as Всего
   | ,count(distinct ПрихНакл.Ссылка) as ВсегоНакл
   | ,count(ПрихНакл.Склад) as ВсегоСклад
   | ,count(ПрихНаклМат.Материал) as ВсегоМатер
   | from
   |  Документ.ПриходнаяНакладная as ПрихНакл
   | left join
   |  Документ.ПриходнаяНакладная.Материалы as ПрихНаклМат
   | on ПрихНакл.Ссылка=ПрихНаклМат.Ссылка
   | group by
   |  ПрихНакл.Ссылка
   | ,ПрихНаклМат.Материал
   | order by
   |  ПрихНакл.Ссылка
   | ,ПрихНаклМат.Материал
   | totals
   |  count(*) as Всего
   | ,count(distinct ПрихНакл.Ссылка) as ВсегоНакл
   | ,count(ПрихНакл.Склад) as ВсегоСклад
   | ,count(ПрихНаклМат.Материал) as ВсегоМатер
   | by
   |  overall
   | ,ПрихНакл.Ссылка
   |


результат: http://savepic.su/755519.htm

конкретно там, где курсор стоит - тут рассматриваю случай, когда в ТЧ дока две строки с одинаковым материалом.
да, записей две, но строка в результате запроса одна (после применения группировки)