SQL在多个表中使用不同的值
我有点困在一些SQL工作上。基本上,我有3个不同的表,看起来像这样:(注:“数字”应该是一本书的ID号,重复数字意味着它是同一本书。为了简单起见,我把它改成这样。) 表A:SQL在多个表中使用不同的值,sql,postgresql,Sql,Postgresql,我有点困在一些SQL工作上。基本上,我有3个不同的表,看起来像这样:(注:“数字”应该是一本书的ID号,重复数字意味着它是同一本书。为了简单起见,我把它改成这样。) 表A: Number Name Surname 1 Bob Bobinson 1 Paul Paulster 2 Simon Simones 3 Anton Antonio etc. 表B: Number Book 1 Taken 1
Number Name Surname
1 Bob Bobinson
1 Paul Paulster
2 Simon Simones
3 Anton Antonio
etc.
表B:
Number Book
1 Taken
1
1
2 Taken
2 Taken
3
3 Taken
3 Taken
etc.
表C:
Number Pages
1 245
2 147
3 512
etc.
我需要做的是对每个不同的名字和姓氏计算表B中重复的次数,然后计算每个名字和姓氏的总页码。
答案表应如下所示:
Bob Bobinson 3 735
Paul Paulster 3 735
Simon Simones 2 294
Anton Antonio 3 1536
SELECT Name, Surname, Count(A.Number = B.Number) FROM A, B, C;
我试过这样的方法:
Bob Bobinson 3 735
Paul Paulster 3 735
Simon Simones 2 294
Anton Antonio 3 1536
SELECT Name, Surname, Count(A.Number = B.Number) FROM A, B, C;
是的,老实说,我完全不知道它应该是什么样子。后来我尝试在A.Number=B.Number时实现,但对我不起作用。任何帮助都将不胜感激
另外,“take”用于稍后检查哪个号码的Taken最多。这应该可以得到您想要的:
select A.Name, B.Surname, count(*), C.Pages
from TableA
Join TableB on A.Number = B.Number
Join TableC on A.Number = C.Number
group by A.Name, B.Surname, C.Pages;
或者,如果子查询使后续更改更容易,则可以使用子查询进行更改,但一般来说,这些更改的执行效果不好:
select A.Name, B.Surname,
(select count(*)
from TableBB
where B.Number = A.Number) As CNT,
C.Pages
from TableA
Join TableC on A.Number = C.Number;
每日小贴士:切换到现代的显式
JOIN
语法!为什么鲍勃和保罗共用同一个身份证?@jarlh他们是一本书的合著者,数字指向不同的书,但我在这里改变了这一点,是为了让表格更容易阅读。确实如此。非常感谢。我真的需要习惯使用Join。没问题。您可能已经知道这一点,但如果您要尝试计算出下一步每本书的数量,您应该能够通过对一个案例语句进行求和来实现这一点,即sum(当B.Book='take'时,案例为1,否则为0结束)。