2015-11-03 80 views
0

我有两个表,让我们假装自己是以下几点:如何通过在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 

回答

2
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  
1
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