#postgresql #sequelize.js
#postgresql #sequelize.js
Вопрос:
Я пытаюсь выполнить операцию findAndCountAll в sequelize. Подсчет будет основан на комбинации из 3 разных столбцов. В одном из столбцов есть операция с подстрокой (столбец ресурсов)
Моя таблица Client выглядит следующим образом,
id, clientId, accountId, resource
1, 4f16, 2b18, table::res/123
2, 4f16, 2b18, chair::res/123
Итак, я подсчитываю строки на основе идентификатора клиента, идентификатора учетной записи, идентификатора ресурса (строка после res / в столбце ресурсов). Итак, с приведенными выше записями я должен получить 1 в качестве count, поскольку ClientID, AccountId и resourceId одинаковы для обоих столбцов.
Мой простой запрос postgres
выберите distinct c.»AccountId», c.»ClientID», substring(«ресурс» из ‘res/([^$] )’) как «Идентификатор ресурса» из «Клиента» как c
Мой запрос sequelize теперь выглядит следующим образом, где нет distinct,
const { rows, count} = await this.client.findAndCountAll({
where: {
clientId: clientId!
},
attributes: ['clientId', 'accountId',
[fn('SUBSTRING', '"resource" from res/([^$] )'), 'resId'],
[fn('COUNT', col('id')), 'totalResource']],
group: ['clientId', 'accountId', 'resource'],
raw: true
});
Я не уверен, как выполнить эту часть с подстрокой, а также выполнить distinct для 3 столбцов. С моим приведенным выше запросом я получаю «Ошибка sequelizedatabase: функция pg_catalog.substring (неизвестно) не существует
Ответ №1:
Удалось заставить это работать с помощью следующего кода:
const { rows, count} = await this.client.findAndCountAll({
where: {
clientId: clientId!
},
attributes: [
fn('DISTINCT', col('clientId'), col('accountId'), [fn('substring', col('resource') , 'res/([^$] )'), 'resId']) ],
group: ['clientId', 'accountId', 'resId'],
raw: true
});