[英]How to do a grouped by join in sql?
我有两个表,让我们假设它们如下:
宠物
+----+----------+-------+
| id | name | type |
+----+----------+-------+
| 1 | itchy | mouse |
| 2 | poochie | dog |
| 3 | scratchy | cat |
| 4 | john | human |
+----+----------+-------+
项圈
+----+---------------+--------+
| id | name | pet_id |
+----+---------------+--------+
| 1 | collar_heaven | 2 |
| 2 | red_collar | 2 |
| 3 | cat_collar | 3 |
| 4 | tiny_collar | 1 |
| 5 | backup_collar | 2 |
+----+---------------+--------+
(请注意,宠物ID#4没有项圈)
我想为与宠物相连的每个项圈选择MIN(name)
和MAX(name)
。
因此,所需的输出为:
预期产量
+----+----------+-------+-------------------+------------------+
| id | name | type | collar_first_name | collar_last_name |
+----+----------+-------+-------------------+------------------+
| 1 | itchy | mouse | tiny_collar | tiny_collar |
| 2 | poochie | dog | backup_collar | red_collar |
| 3 | scratchy | cat | cat_collar | cat_collar |
| 4 | john | human | NULL | NULL |
+----+----------+-------+-------------------+------------------+
本质上是某种
SELECT id, name, type, MIN(name) as first_name, MAX(name) as last_name
FROM pets JOIN collars
GROUP BY pet_id
SELECT
pets.id
, pets.name
, pets.type
, MIN(collars.name) as first_name
, MAX(collars.name) as last_name
FROM
pets
LEFT OUTER JOIN
collars ON pets.id = collars.pet_id
GROUP BY
pets.id
, pets.name
, pets.type
SELECT
pets.id,
pets.name,
pets.type,
MIN(collars.name) as first_name,
MAX(collars.name) as last_name
FROM pets LEFT JOIN collars ON pets.id = collars.pet_id
GROUP BY
pets.id,
pets.name,
pets.type
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.