postgresql - 我想使用 sequelize 计算 Postgresql db 中列的唯一组合
问题描述
我有一个包含 x 和 y 列的 db 表,我想计算 x 和 y 列的唯一组合,并使用 sequelize 查询获取计数值。
我想要这样的查询结果
[
{ x: 821, y: 289, value: 1 },
{ x: 819, y: 290, value: 1 },
{ x: 820, y: 290, value: 1 },
{ x: 821, y: 291, value: 1 },
{ x: 823, y: 293, value: 2 },
{ x: 822, y: 291, value: 5 },
{ x: 820, y: 291, value: 1 },
{ x: 821, y: 290, value: 1 },
{ x: 823, y: 291, value: 2 },
..............................]
我试过了,但没有得到所需的结果
tableData.findAll({
attributes:[ ["x", "y"],
[db.fn('COUNT', (db.fn('DISTINCT', db.col("x"), db.col("y")))), "value"]
],
where: {
store_id: storeId,
zone_id: zoneId,
timestamp: {
[Op.between]: [starDate, endDate],
},
},
group: [["x","y"],"timestamp"],
order: [
['timestamp', 'DESC'],
],
limit: 2000
}).then((data) => {
上面的查询给了我这样的数据,这是错误的格式
[
{ y: '819', value: '1' }, { y: '820', value: '1' }, { y: '821', value: '1' },
{ y: '820', value: '1' }, { y: '821', value: '2' }, { y: '822', value: '1' },
{ y: '823', value: '1' }, { y: '823', value: '2' }, { y: '822', value: '2' },
{ y: '823', value: '1' }, { y: '824', value: '1' }, { y: '819', value: '1' },
{ y: '821', value: '1' }, { y: '823', value: '2' }, { y: '817', value: '2' },
{ y: '819', value: '1' }, { y: '820', value: '1' }, { y: '821', value: '1' }...]
谁能帮我这个?
解决方案
在整个查询过程中,我试图在这里和那里做一些小改动,最后,我得到了我想要的格式的数据。发布我的答案,希望它对其他人有用。
如果我错了或者你有更好的方法,请纠正我。
tableData.findAll({
attributes:["x", "y",
[db.fn('COUNT', db.col("*")), "value"]
],
where: {
store_id: storeId,
zone_id: zoneId,
timestamp: {
[Op.between]: [starDate, endDate],
},
},
group: ["x","y"],
limit: 2000
}).then((data) => {})
推荐阅读
- angular - NativeScript:找不到工作区路径的工作区文件
- python - 将列表形式的字符串转换为整数列表
- git - 我们可以使用/提取一个程序的提交到另一个类似的程序吗?
- javascript - MVC - 如何在 JS 中更新模型后更新视图
- ajax - 在 Laravel 8 中使用 DataTables 进行 Elasticsearch
- docker - 如何为私有应用程序创建私有 solana 网络
- java - Eclipse 动态 Web 项目忽略 webapp/WEB-INF/lib 下的 jar
- android-recyclerview - 我想将recyclerview的项目添加到可刷卡中
- laravel - Laravel HasMany 与参数的关系
- conan - 生成锁文件时无法指定名称和版本