oracle之多表统计查询



起因

主管想根据时间范围统计下各标段各桥梁部件的录入数量,这个任务就交给我吧…

表介绍

  • qr_code_item_type:桥梁部件类型表,类型有桩基、承台、墩柱等
  • qr_code_item1 :桥梁墩柱类部件信息表,关联表qr_code_item_typeqr_code_main
  • qr_code_item2 :桥梁梁类部件信息表,关联表qr_code_item_typeqr_code_main
  • qr_code_main:桥梁标段表

    语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT itype.id,isnull(total, 0) total
    FROM qr_code_item_type itype
    LEFT JOIN (
    SELECT item.item_type_id type,COUNT(*) total
    FROM qr_code_item item
    LEFT JOIN qr_code_main main ON item.qr_code_main_id = main.id
    WHERE main.section = 2 AND isnull(item.update_time, item.create_time) BETWEEN '20180301' AND '20180801'
    GROUP BY item.item_type_id
    UNION ALL
    SELECT item.item_type_id type, COUNT(*) total
    FROM qr_code_item2 item
    LEFT JOIN qr_code_main main ON item.qr_code_main_id = main.id
    WHERE main.section = 2 AND isnull(item.update_time, item.create_time) BETWEEN '20180301' AND '20180801'
    GROUP BY item.item_type_id
    )
    aa ON itype.id = aa.type
    ORDER BY itype.id

ps:墩柱类、梁类虽都属于部件类,但具体信息差别较大,故分成两个表,所以统计的时候使用了联合查询

请博主喝咖啡