我有一个SQL教科书示例,但它似乎非常复杂。 该表有列:
Bike_ID
(主键),Color_Wheel
,Color_Frame
,Color_Cables
,Color_Gearbox
,Color_Brakes
,Color_Lamps
,{ {1}},Color_Paddle
,Color_Chain
和其他人......
我只想选择至少有6种颜色不同的行。因此,9种颜色列中至少有6个值应该是不同的。
这似乎在SQL中非常复杂。在Matlab或Java中,使用Color_Saddle
或setdiff()
然后计算结果是微不足道的。我认为它可能是SQL中的一个内容 - 它可以完成吗?
答案 0 :(得分:0)
要查找至少包含6种不同颜色的自行车,请为每种零件颜色选择UNION ALL
。执行GROUP BY
检查HAVING
子句中不同颜色的数量:
select * from tablename
where Bike_ID in
(
select Bike_ID
(
select Bike_ID, Color_Wheel as color from tablename
union all
select Bike_ID, Color_Frame as color from tablename
...
union all
select Bike_ID, Color_Saddle as color from tablename
)
group by Bike_ID
having count(distinct color) >= 6
)