您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Sequelize如何按照同一字段分组查询数据?

Sequelize如何按照同一字段分组查询数据?

问题描述

一个简单的场景:

fruit表(A喜欢吃苹果和香蕉,B喜欢苹果,C喜欢苹果、香蕉、橘子、猕猴桃,D喜欢猕猴桃)

name fruits
A 1,2
B 1
C 1,2,3,4
D 4

现在想查出来喜欢苹果的有多少人,喜欢香蕉的有多少人,喜欢橘子的有多少人,喜欢猕猴桃有多少人,并且把这个数据拼装成一个数组形式返回。

问题出现的环境背景及自己尝试过哪些方法

目前用SQL查已经可以查出来了:

select sum(find_in_set('1', fruits) > 0) as ‘苹果’,
    sum(find_in_set('2', fruits) > 0) as ‘香蕉’,
    sum(find_in_set('3', fruits) > 0) as ‘橘子’,
    sum(find_in_set(‘4’, fruits) > 0) as ‘猕猴桃’ from `fruit`

但是项目里用的是Sequelize ORM语法,初接触不太会,麻烦各位大神帮忙看看,Sequelize要怎么写呀?

相关代码

我现在用Sequelize只会写单个查询,所以想出了一个办法,就是通过for循环,效果已经实现了,但是这么写感觉很不规范

const fruits = [
    {
      label: ‘苹果‘,
      value: 1,
      number: 0, // 有几个人喜欢苹果
    },
    {
      label: ‘香蕉’,
      value: 2,
      number: 0,
    },
    {
      label: ‘橘子‘,
      value: 3,
      number: 0,
    },
    {
      label: ‘猕猴桃‘,
      value: 4,
      number: 0,
    }
]

for (let i = 0; i <fruits.length; i++) {
    const item =
      (await fruitsService.findAllWithOptions({
        where: sequelize.where(
          sequelize.fn(
            'FIND_IN_SET',
            fruits[i].value,
            sequelize.col('fruits'),
          ),
          '>',
          '0',
        ),
      })) || [];
    fruits[i].number = item.count;
  }
  return fruits;

你期待的结果是什么?实际看到的错误信息又是什么?

我期待能实现查询出每个水果喜欢的人数,并返回数组形式,因为实际场景是要做统计图表。

sequelize 2022/2/19 17:48:25 有589人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶