您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何改善此SQL查询?

如何改善此SQL查询?

让我们回答一个更简单的问题:对于每个id,获取字母中最后一个的Val。如果Y和N是唯一的值,这将起作用。而且查询要简单得多:

SELECT t.ID, MAX(t.Val) FROM t GROUP BY t.ID;

因此,将您的情况简化为简单的情况。使用枚举(如果数据库支持),或者将值代码分成带有排序规则列的另一个表(在这种情况下,Y可以有1个,N可以有2个,所有其他可能的值可以有999个,并且您希望最小 )。然后

SELECT ID, c.Val FROM
     (SELECT t.ID, MIN(codes.collation) AS mx
      FROM t join codes on t.Val = codes.Val GROUP BY t.ID) AS q
JOIN codes c ON mx=c.collation;

这里的代码有两列,Val和Collat??ion。

您也可以使用CTE类型查询来执行此操作,只要您按需要对值进行排序即可。这种方法只有一个联接到一个小的查找表,并且比3个自联接要快得多。

WITH q AS (SELECT t.id, t.Val, ROW_NUMBER() AS r FROM t JOIN codes ON t.Val=codes.Val 
    PARTITION BY t.id ORDER BY codes.collation)
SELECT q.id, q.Val WHERE r=1;
SQLServer 2022/1/1 18:40:05 有526人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶