使用sequelize对mysql进行原生sql查询

import sequelize  from "./conn/index.js";

// import Denglu  from "./entity/denglu";

import fs from 'fs';

import xlsx from 'node-xlsx'



 

const start = process.hrtime();


 

const { QueryTypes } = sequelize;


 

// (async ()=>{

//     let res = await sequelize.query("select * from denglu ", {type: QueryTypes.SELECT } )

//     console.log(res.length)


 

//     res.forEach(item => console.log(item))

// })()

// let res = await sequelize.query("select count(*) from denglu  where cishu > 0 ", {type: QueryTypes.SELECT } )

// console.log(res)

let names = await sequelize.query("select distinct(name) from score1 ", { type: QueryTypes.SELECT })

//  console.log(names)

// const name = "学校办公室"

// let str = "SELECT checked, COUNT(*) AS count FROM score1  where name ='"+ name+"' GROUP BY checked "

let a =[]

const checkedMapping = {

    '优秀': 'youxiu',

    '良好': 'lianghao',

   

    '一般': 'yiban',

    '较差': 'buhege'

  };

const fu = ( fenshu,unitName)=>{

   const b = {

     name: unitName,

     youxiu: 0,   // 优秀

     lianghao: 0, // 良好

     yiban: 0,    // 一般

     buhege: 0    // 不合格

     }

     fenshu.forEach(s => {

        // 使用映射对象来获取正确的属性名

        const propertyName = checkedMapping[s.checked];

       

        // 如果属性名存在(即 s.checked 是一个有效的键),则更新 b 的对应属性

        if (propertyName) {

          b[propertyName] = s.count;

        }

        // 注意:这里我们没有处理 s.checked 不在映射中的情况,

        // 因为根据代码逻辑,这应该是不可能的,除非数据有误。

        // 如果需要处理这种情况,可以添加一个 else 分支来处理未知值。

      });

     

    a.push(b)

}


 

const fu2 = ( fenshu,fenshu2,unitName)=>{

  const b = {

    name: unitName,

    youxiu: 0,   // 优秀

    lianghao: 0, // 良好

    yiban: 0,    // 一般

    buhege: 0,

    x_youxiu:0,

    x_lianghao:0,

    x_yiban:0,

    x_buhege:0

    }

    fenshu.forEach(s => {

       // 使用映射对象来获取正确的属性名

       const propertyName = checkedMapping[s.checked];

       

       // 如果属性名存在(即 s.checked 是一个有效的键),则更新 b 的对应属性

       if (propertyName) {

         b[propertyName] = s.count;

       }

       // 注意:这里我们没有处理 s.checked 不在映射中的情况,

       // 因为根据代码逻辑,这应该是不可能的,除非数据有误。

       // 如果需要处理这种情况,可以添加一个 else 分支来处理未知值。

     });

     fenshu2.forEach(s=>{

      const propertyName = checkedMapping[s.checked];

      if(propertyName){

        b['x_'+propertyName]=s.count

      }

     })

   a.push(b)

}





 

const excel01 = (list)=>{

  let excelData = []

  try{

   

     //添加数据

     var addInfo = {};

     //名称

     addInfo.name = "用户表";

     //数据数组

     addInfo.data = [

         ["名称", "优秀", "良好","一般", "较差", "校级优秀","校级良好","校级一般","校级较差"],

     ];

     list.forEach(item => addInfo.data.push([item.name, item.youxiu, item.lianghao, item.yiban, item.buhege,

         item.x_youxiu, item.x_lianghao,item.x_yiban, item.x_buhege

    ]))

        //添加数据

        excelData.push(addInfo);

        // 写xlsx

    var buffer = xlsx.build(excelData);

    //写入数据

    fs.writeFile('./score1.xlsx', buffer, function (err) {

        if (err) {

            throw err;

        }

        //输出日志

        console.log('Write to xls has finished');

        const [seconds, nanoseconds] = process.hrtime(start);

        const milliseconds = seconds * 1000 + nanoseconds / 1e6;

        console.log(`运行时间: ${milliseconds.toFixed(2)} 毫秒`);

    });

  }catch(e){

    //输出日志

    console.log("excel读取异常,error=%s", e.stack)

  }

}

// for (const jk of names) {

//     console.log("jk : ", jk.name )

// }

(async () => {

    for (const obj of names) {

      let str = `SELECT checked, COUNT(*) AS count FROM score1 WHERE name = '${obj.name}' and length(work_number) = 36 GROUP BY checked`;

      let so = await sequelize.query(str, { type: sequelize.QueryTypes.SELECT });

      let str2 = `SELECT checked, COUNT(*) AS count FROM score1 WHERE name = '${obj.name}' and length(work_number) =28 GROUP BY checked`;

      let so2 = await sequelize.query(str2 , {type: sequelize.QueryTypes.SELECT});

      fu2(so,so2,obj.name);

    }

    // console.log(a.length)

    excel01(a)



 

  })();


 



 

// 初始化对象 b

// const b = {

//     name: '学校办公室',

   

//     youxiu: 0,   // 优秀

//     lianghao: 0, // 良好

//     yiban: 0,    // 一般

//     buhege: 0    // 不合格

//   };

// 创建一个映射对象来将 checked 值映射到 b 的属性

//   so.forEach(s => {

//     // 使用映射对象来获取正确的属性名

//     const propertyName = checkedMapping[s.checked];

   

//     // 如果属性名存在(即 s.checked 是一个有效的键),则更新 b 的对应属性

//     if (propertyName) {

//       b[propertyName] = s.count;

//     }

//     // 注意:这里我们没有处理 s.checked 不在映射中的情况,

//     // 因为根据代码逻辑,这应该是不可能的,除非数据有误。

//     // 如果需要处理这种情况,可以添加一个 else 分支来处理未知值。

//   });

// let b ={}

// b.name= '学校办公室'

// b.lianghao = 0

// b.youxiu =0

// b.yiban =0

// b.buhege =0

// so.forEach( s => {

//     if(s.checked == '良好'){

//        b.lianghao = s.count

//     }else if(s.checked == '优秀'){

//         b.youxiu = s.count

//     }else if(s.checked == '一般'){

//         b.yiban = s.count

//     }else if(s.checked == '不合格'){

//     }

// })

// console.log(b)


 

// names.forEach(item => {

// })

// let users;

// (async () => {

//     console.log("^^^^^^^^^")

//     users = await sequelize.query("select *  from users ", { type: QueryTypes.SELECT })

//     console.log(users)

// })()

// async function test(){

//     users  = await sequelize.query("select distinct(firstName) from users ", { type: QueryTypes.SELECT })

   

// }

// test()

// console.log(users)

// console.log("khjkhjklhj")


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值