|   |   | 
| 
 | Непонятки с КОЛИЧЕСТВО() в запросе | ☑ | ||
|---|---|---|---|---|
| 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 конкретно там, где курсор стоит - тут рассматриваю случай, когда в ТЧ дока две строки с одинаковым материалом. да, записей две, но строка в результате запроса одна (после применения группировки) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |