SQL 子查询只返回一个值。如何使这段代码高效?

黄利昂
select count(*) as CountId, [FirstRouteNo],[ThroughRouteSid],[LastRouteNo],
       (select top 1 [ThroughRouteJson]
        from DirectTransfer as Subquery
        where MainQuery.FirstRouteNo=Subquery.FirstRouteNo and
              MainQuery.ThroughRouteSid = Subquery.ThroughRouteSid and
              MainQuery.LastRouteNo = Subquery.LastRouteNo
       ) as DetailJson,
       (select top 1 RouteMeter
        from DirectTransfer as Subquery 
        where MainQuery.FirstRouteNo = Subquery.FirstRouteNo and
              MainQuery.ThroughRouteSid = Subquery.ThroughRouteSid and
              MainQuery.LastRouteNo = Subquery.LastRouteNo
       ) as RouteMeter
from DirectTransfer as MainQuery                                    
group by MainQuery.[FirstRouteNo],MainQuery.[ThroughRouteSid],MainQuery.[LastRouteNo]
order by CountId desc

我想按此列分组 [FirstRouteNo],[ThroughRouteSid],[LastRouteNo] 然后计算多少记录。但我也想显示两列值,如 [ThroughRouteJson] 和 [RouteMeter] 任何一个记录。因为 [ThroughRouteJson]和 [RouteMeter] 的值几乎没有什么不同。所以我不能和他们分组。然后子查询只返回一个值。所以我写了两个子查询来得到我想要的。因为我的数据库表有超过 1 亿条记录。我想要高效。我怎样才能让这段代码变得更有效率,然后我才能得到相同的结果数据?

戈登·利诺夫

我建议你这样做:

select dt.*, dt2.DetailJson, dt2.RouteMeter
from (select count(*) as cnt, dt.FirstRouteNo, dt.ThroughRouteSid, dt.LastRouteNo
      from DirectTransfer dt                               
      group by dt.FirstRouteNo, dt.ThroughRouteSid, dt.LastRouteNo
     ) dt outer apply
     (select top 1 ThroughRouteJson as DetailJson, RouteMeter
      from DirectTransfer dt2
      where dt.FirstRouteNo = dt.FirstRouteNo and
            dt.ThroughRouteSid = dt.ThroughRouteSid and
            dt.LastRouteNo = dt.LastRouteNo
     ) dt2
order by CountId desc;

你想要索引DirectTransfer(FirstRouteNo, ThroughRouteSid, LastRouteNo)可能还有其他方法可以完成您想要的操作,但是您要尝试执行的操作有点不清楚。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

只更改 sql 返回的数组的一个值

来自分类Dev

SQL查询以从多个标签返回最后一个值

来自分类Dev

SQL Server子查询返回了多个值。当尝试从另一个选择插入子查询时,这是不允许的

来自分类Dev

SQL返回一个干净的值

来自分类Dev

使用SQL子查询或动态查询从配置表更新一个表列值

来自分类Dev

sql查询varchar(max)列以根据其子元素child的值选择一个元素

来自分类Dev

sql查询varchar(max)列以根据其子元素child的值选择一个元素

来自分类Dev

SQL子查询列,其中名称包含一个值

来自分类Dev

SQL:如何只返回记录的 1 个前一个日期,而不是所有以前的日期

来自分类Dev

如果where子句是零的整数,为什么SQL查询返回一个值?

来自分类Dev

SQL查询帮助-CASE STATEMENT返回2行或更多行-选择其中的一个值

来自分类Dev

将SQL的返回值用作另一个查询中的参数

来自分类Dev

SQL WHERE NOT IN 查询返回另一个表中的值

来自分类Dev

如何编写一个从两个searchValue返回匹配项的SQL查询

来自分类Dev

为什么我的SQL查询中的COUNT(*)返回几个值?如何为找到的总行数获取一个单一值?

来自分类Dev

如何从一个唯一的ID满足不同行条件的SQL查询返回行?

来自分类Dev

在我的SQL查询中,如何有一个包含从另一个表查询的值的列?

来自分类Dev

SQL如何在查询中为另一个查询使用值

来自分类Dev

高效的SQL-将重复查询合并为一个

来自分类Dev

SQL:选择一个子查询的总和

来自分类Dev

连接SQL查询返回第一个表

来自分类Dev

SQL查询-每个ID返回一个结果

来自分类Dev

如何编写一个返回包含是和否的列的 SQL 查询?

来自分类Dev

如何使用一个SQL查询更新一列中的多个值?

来自分类Dev

如何检查一个子查询是否是Oracle SQL中另一个子查询的子集?

来自分类Dev

SQL子查询返回了多个值

来自分类Dev

SQL子查询返回了多个值

来自分类Dev

SQL子查询返回多个值

来自分类Dev

如何在应返回多个结果的sql查询返回中一次对一个结果执行操作?

Related 相关文章

  1. 1

    只更改 sql 返回的数组的一个值

  2. 2

    SQL查询以从多个标签返回最后一个值

  3. 3

    SQL Server子查询返回了多个值。当尝试从另一个选择插入子查询时,这是不允许的

  4. 4

    SQL返回一个干净的值

  5. 5

    使用SQL子查询或动态查询从配置表更新一个表列值

  6. 6

    sql查询varchar(max)列以根据其子元素child的值选择一个元素

  7. 7

    sql查询varchar(max)列以根据其子元素child的值选择一个元素

  8. 8

    SQL子查询列,其中名称包含一个值

  9. 9

    SQL:如何只返回记录的 1 个前一个日期,而不是所有以前的日期

  10. 10

    如果where子句是零的整数,为什么SQL查询返回一个值?

  11. 11

    SQL查询帮助-CASE STATEMENT返回2行或更多行-选择其中的一个值

  12. 12

    将SQL的返回值用作另一个查询中的参数

  13. 13

    SQL WHERE NOT IN 查询返回另一个表中的值

  14. 14

    如何编写一个从两个searchValue返回匹配项的SQL查询

  15. 15

    为什么我的SQL查询中的COUNT(*)返回几个值?如何为找到的总行数获取一个单一值?

  16. 16

    如何从一个唯一的ID满足不同行条件的SQL查询返回行?

  17. 17

    在我的SQL查询中,如何有一个包含从另一个表查询的值的列?

  18. 18

    SQL如何在查询中为另一个查询使用值

  19. 19

    高效的SQL-将重复查询合并为一个

  20. 20

    SQL:选择一个子查询的总和

  21. 21

    连接SQL查询返回第一个表

  22. 22

    SQL查询-每个ID返回一个结果

  23. 23

    如何编写一个返回包含是和否的列的 SQL 查询?

  24. 24

    如何使用一个SQL查询更新一列中的多个值?

  25. 25

    如何检查一个子查询是否是Oracle SQL中另一个子查询的子集?

  26. 26

    SQL子查询返回了多个值

  27. 27

    SQL子查询返回了多个值

  28. 28

    SQL子查询返回多个值

  29. 29

    如何在应返回多个结果的sql查询返回中一次对一个结果执行操作?

热门标签

归档