例えば、特定の会社に所属するアカウントの新規作成数を月次で集計したい場合(そんな状況があるのかどうかはさておき)
想定結果
month | cnt |
---|---|
2020-03 | 10 |
PostgreSQL
SELECT
TO_CHAR(created_date, 'YYYY-mm') AS month,
COUNT(user_id) AS created_cnt
FROM users
WHERE company_id = 1
GROUP BY month
Sequelize
const sequelize = require('sequelize');
const userCtrl = require('../models/userCtrl')
...
const res = await userCtrl.findAll({
attributes: [
[sequelize.fn('to_char', sequelize.col('created_date'), 'YYYY-mm'), 'month'],
[sequelize.fn('count', sequelize.col('user_id')), 'created_cnt']
],
where: {
company_id: 1,
},
group: ['month'],
});
sequelize.fn
...データベース関数を指定
sequelize.col
...対象のカラムを指定
蛇足
MySQLではTO_CHAR関数の代わりにDATE_FORMAT関数
を使う
指定するフォーマットには、「%」文字をつける
SELECT
DATE_FORMAT(created_date, '%Y-%m') AS month,
COUNT(user_id) AS created_cnt
...
参考
Sequelize公式 - sequelize.fn
MySQL5.6リファレンスマニュアル - DATE_FORMAT