Подсчет уникальных записей

Практические советы по работе с FileMaker, типичные задачи и их решения. У вас вопрос? Пишите сюда.
hirurg
Сообщения: 6
Зарегистрирован: 07 окт 2017, 16:23

Подсчет уникальных записей

Сообщение hirurg » 07 окт 2017, 16:29

Привет Всем!
Проблема. Уже много чего перепробовал, но ничего не помогает.
Задача.
Есть таблица с разными записями, некоторые повторяются, но требуется их подсчитать именно уникальных записей в таблице.
например:
школа
школа1
ЖД
ЖД1
школа2
школа
жд
итог: 5 записей
Пробовал скрипты и калькуляции, такие как ExecuteSQL (
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
Надеюсь на вашу помощь. Заранее всем спасибо.
Вложения
подсчет уникальных записей.fmp12.zip
(70.72 КБ) 110 скачиваний

andrey volkov
Сообщения: 202
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Подсчет уникальных записей

Сообщение andrey volkov » 07 окт 2017, 18:26

Сделайте поле-калькуляцию с формулой Upper(искомое поле)
и уже по этому полю делайте запрос SELECT DISTINCT...

hirurg
Сообщения: 6
Зарегистрирован: 07 окт 2017, 16:23

Re: Подсчет уникальных записей

Сообщение hirurg » 07 окт 2017, 18:37

не могу разобраться в синтаксисе ExecuteSQL (
"SELECT DISTINCT \"FruitNameField\"
FROM \"FruitTableName\")
как правильно все расписать?

andrey volkov
Сообщения: 202
Зарегистрирован: 11 сен 2017, 13:42
Откуда: Санкт-Петербург

Re: Подсчет уникальных записей

Сообщение andrey volkov » 08 окт 2017, 06:28

ExecuteSQL ("SELECT DISTINCT FruitNameField FROM FruitTableName"; ""; "")

hirurg
Сообщения: 6
Зарегистрирован: 07 окт 2017, 16:23

Re: Подсчет уникальных записей

Сообщение hirurg » 08 окт 2017, 10:23

Снимок экрана 2017-10-08 в 17.20.07.png
Снимок экрана 2017-10-08 в 17.20.07.png (57.94 КБ) 3519 просмотров

Аватара пользователя
Arcady
Администратор
Сообщения: 149
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Подсчет уникальных записей

Сообщение Arcady » 08 окт 2017, 18:33

Функция ExecuteSQL выполняет SQL запрос который передается ей в параметре как текстов строка. Еще два обязательных параметра это символы разделителя между колонками и между строками. Также можно передать в функцию какие-то дополнительные значения (например значения полей или переменных) в виде параметров самого запроса

В простом случае имеем:

Код: Выделить всё

ExecuteSQL ("текст самого SQL запроса"; "" ; "" )
последние два параметра по умолчанию можно оставить пустыми.

В самом SQL запросе могут потребоваться кавычки, например для указания параметра запроса (в виде текста), либо если используемые названия полей или таблиц содержат пробелы (тогда название нужно заключить в кавычки). Нет нужды говорить, что кавычки должны быть экранированы.

Соотвественно:

Код: Выделить всё

ExecuteSQL ("SELECT DISTINCT FruitNameField FROM FruitTableName"; ""; "")
вполне корректная запись.
Если запрос не работает, то в первую очередь надо проверить:
- корректность написания названия поля и таблицы (примитивно, но бывает же)
- наличие в графе реляций таблицы FruitTableName, так в ExecuteSQL "понимает" только те названия таблиц, которые есть на графе Relationships

Однако в самом топике шла речь о количестве тут мы могли бы использовать COUNT(), но в FM COUNT (DISTINCT ) почему-то не работает, как и DISTINCT COUNT() :)
Можно использовать

Код: Выделить всё

ValueCount ( ExecuteSQL ("SELECT DISTINCT FruitNameField FROM FruitTableName"; ""; "")  )
Но в любом случае такие значения как: "школа" и "школа1" будут рассматриваться как уникальные значения. Нужно как-то очищать их от "мусора" предварительно. Может используя Filter или что-то еще, в зависимости от типа мусора,
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

hirurg
Сообщения: 6
Зарегистрирован: 07 окт 2017, 16:23

Re: Подсчет уникальных записей

Сообщение hirurg » 09 окт 2017, 15:47

Ну вы просто гении! Получилось! Супер!
Но сам бы я до этого не допетрил.
Нужно было делать с реляцией.
Спасибо вам за помощь, подробное разжевывание!
выкладываю пример. Думаю многим пригодится.
Вложения
FruitTableName.fmp12.zip
(136.42 КБ) 106 скачиваний

Аватара пользователя
Arcady
Администратор
Сообщения: 149
Зарегистрирован: 10 сен 2017, 20:45
Контактная информация:

Re: Подсчет уникальных записей

Сообщение Arcady » 09 окт 2017, 16:17

Код: Выделить всё

Ну вы просто гении! Получилось! Супер! 
На конференцию приходите, там гениев будет полный зал :)
Аркадий Перла.
ТриА. Разработка решений для FileMaker
http://tria.pw

hirurg
Сообщения: 6
Зарегистрирован: 07 окт 2017, 16:23

Re: Подсчет уникальных записей

Сообщение hirurg » 09 окт 2017, 16:32

Спасибо. Я бы с удовольствием, но лететь далеко:) точнее сначала ехать 400 км до Новосибирска, потом лететь в Москву. Но на будущее запланирую.

Alexei Sytch
Сообщения: 64
Зарегистрирован: 21 сен 2017, 18:48
Откуда: Минск

Re: Подсчет уникальных записей

Сообщение Alexei Sytch » 15 окт 2017, 21:01

Попробуйте ExecuteSQL ("SELECT COUNT( DISTINCT UPPER(FruitNameField) ) FROM FruitTableName"; ""; "").
У меня работает на 16 и на 15
P.S.Без SQL уникальный список значений можно получать с помощью custom function http://www.briandunning.com/cf/596
Скрипт будет выглядеть как-то так
Set Field ["Количество" ; "ValueCount( UniqueValues ( $$list_of_values) ) "]

Реляция в вашем примере нужна была только что бы на макете показать записи из второй таблицы. Для самого SQL запроса она не нужна

Ответить