根据列的数据优先级选择记录 - mysql

连接_tbl

point1   point2   medium


ktm      pkr      air

pkr      ktm      road

pkr      baglung  road

baglung  palpa    road

ktm      brt      air

brt      ktm      road

baglung  pkr      train

所需输出


point1   point2   medium


ktm      pkr      air

pkr      baglung  train

baglung  palpa    road

ktm      brt      air

我的问题与这个问题类似。我想做的是根据介质的值创建一个唯一行列表,如果所有介质记录都存在于相同的点,则优先于航空、火车和道路。注意:优先顺序是航空>火车>公路。


交互式爱情
浏览 97回答 2
2回答

守着一只汪

您可以使用这些功能least(),greatest()因为点是可以互换的:select t.point1, t.point2, t.mediumfrom (  select *,    row_number() over(      partition by least(point1, point2), greatest(point1, point2)       order by field(medium, 'air', 'train', 'road')    ) rn    from connections_tbl ) twhere t.rn = 1结果:| point1  | point2 | medium || ------- | ------ | ------ || baglung | palpa  | road   || baglung | pkr    | train  || ktm     | brt    | air    || ktm     | pkr    | air    |

慕村9548890

您可以使用相关子查询进行过滤:select c.*from connections_tbl cwhere c.medium = (    select c1.medium     from connections_tbl c1    where c1.point1 = c.point1 and c1.point2 = c.point2    order by field(medium, 'air', 'train', 'road')    limit 1) t或者,在 MySQL 8.0 中,您可以使用row_number():select point1, point2, mediumfrom (    select         c.*,        row_number() over(partition by point1, point2 order by field(medium, 'air', 'train', 'road')) rn    from connections_tbl c) twhere rn = 1
打开App,查看更多内容
随时随地看视频慕课网APP