联接三个表并计数

yayuj

这确实很复杂,然后我将举一个示例以使其变得更容易。

想象一下,我们有4张桌子:车库,汽车,证券,地方。

garages是您可以找到的地方carssecurities是可以确保那辆车在车库内安全的安全设施,也是places可以找到与该车库相似的车库的地方。然后我们有一张这样的桌子。

台式车库:

-----------------------------------
|garage_id|garage_name|garage_size|
-----------------------------------
|        1|   Garage 1|        200|
-----------------------------------
|        2|   Garage 2|        400|
-----------------------------------

车表:

---------------------------
|car_id|car_name|garage_id|
---------------------------
|     1|   Car 1|        1|
---------------------------
|     2|   Car 2|        1|
---------------------------
|     3|   Car 3|        2|
---------------------------

证券表:

----------------------------------
|security_id|security_name|car_id|
----------------------------------
|          1|  Security 1|      1|
----------------------------------
|          2|  Security 2|      1|
----------------------------------
|          3|  Security 3|      2|
----------------------------------
|          4|  Security 4|      3|
----------------------------------

位置表:

-------------------------------
|place_id|place_name|garage_id|
-------------------------------
|       1|   place 1|        1|
-------------------------------
|       2|   place 2|        1|
-------------------------------
|       3|   place 3|        1|
-------------------------------
|       4|   place 4|        2|
-------------------------------
|       5|   place 5|        2|
-------------------------------

我要列出的车库和三个表分别是汽车,有价证券和诸如此类的地方:

车库1有2辆带有3种证券的汽车,还有3个类似的车库

车库2有1辆有1种证券的汽车,还有2个类似的车库

现在您可能会问,为什么Garage 1要有3种证券?因为Garage 1Car 1Car 2Car 1有两个证券Security 1Security 2Car 2有1个是Security 3

这里的问题是:如何连接表并在一个查询中计数并返回结果,就像您在上面看到的那样?

托斯滕·凯特纳(Thorsten Kettner)

只需加入所有表,按车库分组并计算不同的匹配项:

select 
  g.garage_name, 
  count(distinct c.car_id) as count_cars,
  count(distinct s.security_id) as count_securities,
  count(distinct p.place_id) as count_places
from garages g
left join cars c on c.garage_id = g.garage_id
left join securities s on s.car_id = c.car_id
left join places p on p.garage_id = g.garage_id
group by g.garage_name
order by g.garage_name;

至于所需的输出字符串,请连接您的结果:

g.garage_name || ' has ' || count(distinct c.car_id) || ' cars with ' || ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server:联接三个表

来自分类Dev

MySQL跨三个表联接

来自分类Dev

SQL:左联接与三个表

来自分类Dev

将三个表与条件联接

来自分类Dev

SQL联接查询与三个表

来自分类Dev

如何对三个表使用联接

来自分类Dev

LINQ查询联接三个表

来自分类Dev

在Solr中联接三个表

来自分类Dev

BigQuery联接三个表

来自分类Dev

获得三个联接表的列

来自分类Dev

在PostgreSQL中联接三个表后对行进行计数

来自分类Dev

跨三个表左联接(带联结表)

来自分类Dev

包含三个表的联接的查询不起作用?

来自分类Dev

用MAX函数联接三个表

来自分类Dev

SQL在三个联接表上查找值

来自分类Dev

共享相同主键的三个表之间的完全联接

来自分类Dev

使用三个表的内部联接编写mysql查询

来自分类Dev

在Laravel中使用冲突的列名联接三个表

来自分类Dev

如何联接三个表并显示结果?

来自分类Dev

如何用NOT IN CLAUSE联接三个表

来自分类Dev

Hibernate映射-如何联接三个表

来自分类Dev

如何联接三个表并编写查询?

来自分类Dev

如何在ROOM中联接三个表

来自分类Dev

使用三个表进行内部联接

来自分类Dev

如何在日期之后联接三个表?

来自分类Dev

在psql中联接三个表(SQL查询)

来自分类Dev

如何使用三个表进行内部联接?

来自分类Dev

如何联接三个表以求和

来自分类Dev

MySQL查询,三个表,外部联接