【问题标题】:How can I rewrite sql query with having count to sequelize query?如何通过计数来重写 sql 查询以对查询进行续集?
【发布时间】:2022-11-03 01:02:21
【问题描述】:

我有这个 SQL 字符串查询:

SELECT company_id, COUNT(company_id)
FROM core.non_ceased_companies_prod_unit
GROUP BY company_id
HAVING COUNT(company_id) > 1

结果是:

我想要第二列(即“无列名”)和行数(现在是 4)的总和

所以结果应该是:

{
  companies: 4
  productions: 11 //(2+3+2+4)
}

查询应该是 Sequelize 变体

【问题讨论】:

  • 您可以将列命名为例如“频率”通过:COUNT(company_id) AS frequency
  • 谢谢,但我是使用 Sequelize 和 SQL 的第一天,所以我不知道如何将其重写为 Sequelize 查询。但这些信息也很有帮助。谢谢

标签: javascript sql sequelize.js


【解决方案1】:

如果创建 SQL 视图,则可以从该视图中进行选择:

笔记:下面的查询和模式可以执行via SQL Fiddle

存储过程

CALL companyProductions();

结果

companies productions
4 11

续集

sequelize
  .query('CALL companyProductions()')
  .then(data => console.log(data)); // [{ companies: 4, productions: 11 }]

架构

使用分隔符://

CREATE TABLE company (
  id varchar(255) NOT NULL,
  name varchar(255) NOT NULL,
  PRIMARY KEY (id)
)//

CREATE TABLE non_ceased_companies_prod_unit (
  company_id varchar(255) NOT NULL,
  units int,
  CONSTRAINT FK_CompanyId FOREIGN KEY (company_id)
  REFERENCES company(id)
)//

CREATE VIEW unit_frequency_by_company AS
  SELECT company_id, COUNT(company_id) AS frequency
    FROM non_ceased_companies_prod_unit
    GROUP BY company_id
    HAVING frequency > 1//

CREATE PROCEDURE companyProductions()
BEGIN
  SELECT COUNT(*) AS companies, SUM(frequency) AS productions
    FROM unit_frequency_by_company;
END//

架构数据

INSERT INTO company(id, name)
  VALUES ('DK-10001560', 'Company A'),
         ('DK-10001587', 'Company B'),
         ('DK-10005809', 'Company C'),
         ('DK-10006511', 'Company D')//
 
INSERT INTO non_ceased_companies_prod_unit(company_id, units)
  VALUES ('DK-10001560', 1),
         ('DK-10001560', 1),
         ('DK-10001587', 1),
         ('DK-10001587', 1),
         ('DK-10001587', 1),
         ('DK-10005809', 1),
         ('DK-10005809', 1),
         ('DK-10006511', 1),
         ('DK-10006511', 1),
         ('DK-10006511', 1),
         ('DK-10006511', 1)//

【讨论】:

  • 谢谢!我需要 Sequelize 查询(使用 orm)
  • @VyacheslavTarshevskiy 查看上面的更新响应。
【解决方案2】:

请尝试以下查询:

SELECT COUNT(company_id) as companies, SUM(company_cnt) as productions FROM (
SELECT company_id, COUNT(company_id) as company_cnt
FROM core.non_ceased_companies_prod_unit
GROUP BY company_id
HAVING COUNT(company_id) > 1
)foo

【讨论】:

  • 谢谢你。我有问题在 Sequelize 查询中编写它:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 2023-03-13
  • 2018-01-08
  • 1970-01-01
  • 2014-07-23
  • 2012-10-04
相关资源
最近更新 更多