如果我有桌子
人:ID_Person,姓名
专业:ID_Prof,Prof_Name,ID_Person
如果ID_Person在第二个表格中多次出现,我想显示所有人物名称及其专业数量,我该怎么办?
我知道如果我想算一些我能写的东西 SELECT ID_Person,count(*)as c 来自职业 GROUP BY ID_Person; 但不知道如何将其与其他表中的列链接以获得正确的值。
答案 0 :(得分:0)
要仅显示包含多个SecureRandom.random_number(9**6)
的用户,那么您将6.times.map
两个表格,并使用Profession
与join
汇总并使用count()
进行过滤:< / p>
group by
如果你想为这些人展示职业:
having()
答案 1 :(得分:0)
我相信你正在寻找这样的东西。左连接将引入所有数据,不会排除任何用户。 连接也可以是内连接。然后,内部联接将仅显示两个表中存在的用户。
<强> LEFT 强>
select x.ID_Person, count(x.ID_Person) as [count] from table1 x
left join table2 y on y.ID_Person= x.ID_Person
where x.ID_Person <> null
group by x.ID_Person
<强> INNER 强>
select x.ID_Person, count(y.ID_Person) from table1 x
inner join table2 y on y.ID_Person= x.ID_Person
group by x.ID_Person
答案 2 :(得分:0)
你可能会尝试下面这样的事情。但是,您必须考虑是否需要离开连接而不是内连接。如果可能有人没有任何职业,因此在职业表中不存在,您可能希望离开加入。
SELECT pe.Name
, Professions = COUNT(pr.Prof_Name)
FROM dbo.Person (NOLOCK) pe
JOIN dbo.Profession (NOLOCK) pr ON pe.ID_Person = pr.ID_Person
GROUP BY pe.Name
答案 3 :(得分:0)
最简单的解决方案可能是在子查询中计算:
select
id_person,
name,
(select count(*) from profession pr where pr.id_person = p.id_person) as profession_count
from person p;
您可以通过外部联接实现相同的目标:
select
p.id_person,
p.name,
coalesce(pr.cnt, 0) as profession_count
from person p
left join (select id_person, count(*) as cnt from profession group by id_person) pr
on pr.id_person = p.id_person;
在加入之前聚合通常是一个好主意。无论如何,这是如何加入第一和聚合然后:
select
p.id_person,
p.name,
coalesce(count(pr.id_person), 0) as profession_count
from person p
left join profession pr on pr.id_person = p.id_person
group by p.id_person, p.name;
按照标准SQL,按p.id_person进行分组就足够了,因为名称在功能上取决于id(即id唯一地定义了一个人,因此它是属于它的一个单一名称)。但是,某些DBMS并不完全符合此处的标准,并要求您将名称放在所示的group by子句中,或者在select子句中对其进行虚拟聚合(例如max(p.name)
)。
答案 4 :(得分:0)
这是一种方式(MySQL InnoDB)
Person
+-----------+-------+
| ID_Person | Name |
+-----------+-------+
| 1 | bob |
| 2 | alice |
+-----------+-------+
Profession
+---------+--------------------+-----------+
| ID_Prof | Prof_Name | ID_Person |
+---------+--------------------+-----------+
| 1 | janitor | 1 |
| 2 | cook | 1 |
| 3 | computer scientist | 2 |
| 4 | home maker | 2 |
| 7 | astronaut | 2 |
+---------+--------------------+-----------+
select Name, count(Prof_Name)
from Person left join Profession
on (Person.ID_Person=Profession.ID_Person)
group by Name;
+-------+------------------+
| Name | count(Prof_Name) |
+-------+------------------+
| alice | 3 |
| bob | 2 |
+-------+------------------+
希望这有帮助。