如何按此表分组?

时间:2016-09-19 03:47:11

标签: sql oracle group-by

我的表

PERSON  |  car type |   color  |  make
 ------------------------------------
mark    |   sedan   |          |
kevin   |   sedan   |          |
kevin   |           | blue     |
kevin   |           |          | honda
john    |           | gray     |
john    |           |          | toyota
charlie |   suv     |          |
charlie |           | orange   |
charlie |           |          | volvo
charlie |  sedan    |          |
charlie |           | blue     |

我想按人分组,但不是按表达式分组

预期输出

PERSON  |  car type |   color  |  make
 ------------------------------------
mark    |   sedan   |          |
kevin   |   sedan   |  blue    |  honda
john    |           |  gray    |  toyota
charlie |   suv     |  orange  |  volvo
charlie |   sedan   |  blue    |

4 个答案:

答案 0 :(得分:1)

我们希望person列在人名列上是唯一的,但charlie命名记录是两次双重分组,因此你不可能重命名该列以获得该输出,我已经解决了这个问题{{ 3}}检查。

答案 1 :(得分:0)

如果其他字段包含空白或只包含一个值,则可以安全地使用此查询。

select PERSON, max(car_type) as Car_type, max(color) as color, max(Make) as Make 
from YourTable
group by PERSON

答案 2 :(得分:0)

试试这种方式

Select a.person,a.car_type,b.color,c.Make from (
select PERSON, car_type
From yourtable  
Group by Person,car_type
) as a
join (
select PERSON, color
From yourtable 
Group by Person,color) as b on a.person=b.person
join (
select PERSON, Make
From yourtable 
Group by Person,Make) as c on a.person= c.person

答案 3 :(得分:0)

根据我的理解,只有可能的解决方案是更新car_typecolormake列,而不是拥有新条目或拥有主键列< / strong>即可。因为,没有办法将其他列值关联起来以获得预期的输出(考虑人名charlie的例子)。这样可以减少不必要的插入和总行数。