多个表上的查询计数/总和

Posted

技术标签:

【中文标题】多个表上的查询计数/总和【英文标题】:Query Count/SUM on multiple tables 【发布时间】:2021-11-12 02:29:46 【问题描述】:

我有一个包含以下表格的数据库:

CREATE TABLE PAR (
    ID          varchar(10) not null,
    Name                varchar(20) not null,
    State               varchar(20) not null,
    primary key (ID)
);




INSERT INTO PAR (ID, Name, State)
VALUES
('A000','Susan','New York'),
('B123','Bob','Texas'),
('C456','Tony','Washington'),
('D789','Adam','California');


CREATE TABLE GROUP (
    GroupID         varchar(25) not null,
    Person1         varchar(15) not null,
    Person2         varchar(15) not null,
    Person3         varchar(15),
    Person4         varchar(15),
    primary key (GroupID)
    );


INSERT INTO GROUP (GroupID, Person1, Person2, Person3, Person4)
VALUES
('G234','A000','B666','C777'),
('G456','B123','D898','E632'),
('G789','C456', null, null),
('G444','D789','O123', null);


CREATE TABLE SOLO (
    Classification          varchar(15) not null,
    ID      varchar(10) not null,
    Fruits          varchar(10) not null,
    primary key (Classification, ID)
    foreign key (ID) references PAR(ID)
);

INSERT INTO SOLO(Classification, ID, Fruits)
VALUES
('A Group','A000','Apple'),
('A Group','B123','Banana'),
('B Group','C456','Orange');


CREATE TABLE GROUPINGS (
    Classification      varchar(20) not null,
    Group           varchar(25) not null,
    Fruits          varchar(15) not null,
    primary key (Classification, Group)

    foreign key (Group) references GROUP(GroupID)
);

INSERT INTO GROUPINGS(Classification, Group, Fruits)
VALUES
('A Group','G234','Apple'),
('B Group','G456','Grape'),
('A Group','G789','Banana'),
('D Group','G444','Orange');

我正在尝试从我的查询中获得以下结果:

State|  Fruits
------+-------
New York| 2
Texas   | 2
Washington| 2
California| 1

我创建了一个看起来像这样的查询,但它不起作用:我知道我需要总结表中所有不同的水果,并且为此我使用了公共键,但我不确定我是如何做到的我对 SQL 查询很陌生

SELECT P.State, COUNT(S.ID) + COUNT(z.Group) as gSum
FROM PARTICIPANT AS P, SOLO AS S,
GROUPINGS AS G, GROUP as Z
WHERE z.GroupID = G.Group
GROUP BY P.STATE 

我需要弄清楚如何将 PAR 表中的 ID 键与 GROUP 表中的每个人列联系起来

【问题讨论】:

【参考方案1】:

首先,你确定所有的语句都执行成功了吗!? 在您的代码中:

CREATE TABLE GROUP ( 
GroupID varchar(25) not null,
Person1 varchar(15) not null, 
Person2 varchar(15) not null,
Person3 varchar(15) not null, 
Person4 varchar(15) not null, 
primary key (GroupID) );


INSERT INTO GROUP 
(GroupID, Person1, Person2, Person3, Person4) 
VALUES
('G234','A000','B666','C777'), 
('G456','B123','D898','E632'), 
('G789','C456', null, null), 
('G444','D789','O123','D225',null);

使用非空约束指定的所有列。但是在插入代码中,第一个错误是您发送空值,第二个错误是您有 5 列但只发送了 4 个值。

您可以编辑插入语句并发送正确和完整的值。 删除任何空值或更改表约束以接受空值。

其次,在select语句中,你不需要那样使用sum函数,数学加法运算会得到计数的总和。你的代码可能是这样的:

SELECT P.State, COUNT(S.ID) + COUNT(z.Group) as gSum
FROM PARTICIPANT AS P, SOLO AS S,
GROUPINGS AS G, GROUP as Z
WHERE z.GroupID = G.Group
GROUP BY P.STATE 

以上代码与条件或插入数据是否有其他错误无关。

最后,您没有告诉我们您遇到了什么错误,以及显示了哪些错误消息!。

告诉我们更多信息以帮助我们帮助您。

【讨论】:

我不知道你到底想从这段代码中得到什么:“SUM(COUNT(S.ID) + COUNT(Z.Group))” SELECT P.State, COUNT(S.ID) + COUNT(z.Group) as gSum FROM PARTICIPANT AS P, SOLO AS S, GROUPINGS AS G, GROUP as Z GROUP BY P.STATE WHERE z.GroupID = G.Group 当我尝试在 GROUP BY 之后使用 WHERE 时出现错误,它指出“WHERE 在此位置无效”。澄清一下,基本上我希望找到每个州的水果总数 是的,使用“have”而不是“where”。或者在 GROUP BY 之前使用 where 条件 我相信这是我正在寻找的查询,但是我收到一个错误代码 1054,上面写着“Unknown column z.Group in having clause 我编辑了我的答案试试。但在尝试之前,请在查询正确之前检查所有代码,我认为“GROUP”这个词在某些语言中是关键字。是否所有表都创建成功并且所有数据也都插入了?那你能解释一下表之间的逻辑关系吗?

以上是关于多个表上的查询计数/总和的主要内容,如果未能解决你的问题,请参考以下文章

同一张表上的多个连接,在一个查询中计数

使用右表上的总和分组对多列进行 SQL 连接

SUM GROUP BY与多个表上的子查询

如何使用具有多个 GROUP BY、子查询和 WHERE IN 在大表上的查询来优化查询?

结合两个查询并获得计数的总和

同一张表上的多个事务,同时