Как я могу получить количество строк, которые равны определенному значению при использовании groupby с Sequelize и SQLite? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть таблица с email, name, order_number, review. Все эти поля text. Я группирую результаты по email и подсчитываю, сколько из них имеет order_number.

Значением поля review является 'Live', 'Failed' или null. Я хотел бы подсчитать, сколько раз каждое из этих значений встречается на один адрес электронной почты и вернуть счет в новом столбце (review_live_count, review_failed_count и review_null_count).

Вот мой текущий код:

let users = await db.reservations.findAll({
    attributes: ['email', 'name',[db.sequelize.fn('count', db.sequelize.col('order_number')), 'orders']], group: ["email"],
    raw:true
  });

Я использую Node, Sequelize и SQLite. Sequelize и sequelize оба экспонируются через объект db.

1 Ответ

1 голос
/ 26 апреля 2020

Можете ли вы попробовать использовать sequelize literal

let users = await db.reservations.findAll({
attributes: [
  'email', 
  'name',
  [db.sequelize.fn('count', db.sequelize.col('order_number')), 'orders'],
  [db.sequelize.literal(`COUNT (distinct "id") FILTER ( WHERE "review" = 'Live' )` ), 'review_live_count'],
  [db.sequelize.literal(`COUNT (distinct "id") FILTER ( WHERE "review" = 'Failed' )` ), 'review_failed_count'],
  [db.sequelize.literal(`COUNT (distinct "id") FILTER ( WHERE "review" is null )` ), 'review_null_count'],
],
group: ["email"],
raw:true
});

Надеюсь, это поможет

...