繁体   English   中英

如何在sql中按分组进行分组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM