SQL窗体函數一例

SQL窗体函數一例

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

需求:

         MSSQL,列出服務實例中全部數據庫的例如以下信息: 數據庫ID、數據庫名、創建日期、數據文件類型、數據文件大小、數據庫總大小、文件所在路徑。

寫法(後面的百分比為所花時間占比):

-- 连接子查询  (47%)
WITH cte_TotalSize AS
(
	SELECT database_id
	      ,CAST(SUM(size) AS FLOAT)/128 AS [TotalSize(MB)]
	FROM sys.master_files
	GROUP BY database_id
)
SELECT a.database_id AS [DB_ID]
      ,b.name AS [DB_Name]
      ,b.create_date
      ,CASE a.type WHEN 1 THEN 'Log' ELSE 'Data' END AS File_Type
      ,CAST(a.size AS FLOAT)/128 AS [Size(MB)]  -- Size以页(8 KB)为单位
      ,c.[TotalSize(MB)]
      ,a.physical_Name AS File_Path
FROM sys.master_files a
INNER JOIN sys.databases b ON a.database_id = b.database_id
INNER JOIN cte_TotalSize c ON a.database_id = c.database_id


-- 标量子查询  (34%)
SELECT a.database_id AS [DB_ID]
      ,b.name AS [DB_Name]
      ,b.create_date
      ,CASE a.type WHEN 1 THEN 'Log' ELSE 'Data' END AS File_Type
      ,CAST(a.size AS FLOAT)/128 AS [Size(MB)]  -- Size以页(8 KB)为单位
      ,(SELECT CAST(SUM(size) AS FLOAT)/128 FROM sys.master_files WHERE database_id = a.database_id) AS [TotalSize(MB)]
      ,a.physical_Name AS File_Path 
FROM sys.master_files a
INNER JOIN sys.databases b ON a.database_id = b.database_id


-- 窗体函数  (19%)
SELECT a.database_id AS [DB_ID]
      ,b.name AS [DB_Name]
      ,b.create_date
      ,CASE a.type WHEN 1 THEN 'Log' ELSE 'Data' END AS File_Type
      ,CAST(a.size AS FLOAT)/128 AS [Size(MB)]  -- Size以页(8 KB)为单位
      ,CAST(SUM(size) OVER(PARTITION BY a.database_id) AS FLOAT)/128 AS [TotalSize(MB)]
      ,a.physical_Name AS File_Path 
FROM sys.master_files a
INNER JOIN sys.databases b ON a.database_id = b.database_id

結果:

SQL窗体函數一例

均得出正確結果的上面三種方法,代碼越來越少,性能卻越來越好。。

当中第三種是使用了窗体函數,相關文檔:http://msdn.microsoft.com/zh-cn/library/ms189461.aspx

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118350.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月7日 下午1:00
下一篇 2021年12月7日 下午2:00


相关推荐

  • c语言延时函数nop,延时函数怎么写delay

    c语言延时函数nop,延时函数怎么写delay1.c语言延时函数delay,怎么算延时下面是delay函延迟函数里执行的都是空语句,也就是说通过循环执行空语句来达到延迟的目的.每执行一条语句,即使是空语句都要耗费电脑一些处理时间的,就是因为这个,在延迟函数里写一些无关紧要的东西,用来浪费电脑处理时间,从而达到延迟目的。数原型:原型:voidDelay(unsignedintnDelay){unsignedinti,j,k;…

    2022年6月18日
    32
  • Pycharm设置utf-8自动显示

    Pycharm设置utf-8自动显示File gt Setting gt Editor gt FileandCodeT gt pythonscript 右侧框框内输入 nbsp coding utf 8 nbsp 然后重新启动 Pycharm 这样每个新建的 Python 文件行首都会显示 nbsp coding utf 8

    2026年3月27日
    2
  • SkillDeck支持OpenClaw了,顺便聊聊小龙虾

    SkillDeck支持OpenClaw了,顺便聊聊小龙虾

    2026年3月13日
    3
  • jQuery学习笔记总结

    jQuery学习笔记总结1 绝对定位 abs 与相对定位 relative nbsp nbsp nbsp 区别是相对定位参照自己的位置进行移动 当然需要设置 topleft 这些生效 并且原来的位置保留着偏移后会把其它的层遮罩住 nbsp nbsp nbsp 绝对定位就是的参照位置就不像相对那样是自己了至于是哪个就看它的上级或上上级有没有定位了也就是有没有 position relative 或 position fixed 等吧当要绝对定位的层设好

    2026年3月16日
    2
  • 微信自动回复机器人使用教程[通俗易懂]

    微信自动回复机器人使用教程[通俗易懂]第一步,打开软件,选择关键词回复一栏第二步:单击鼠标右键选择添加一个词,设置好关键词,回复词,选择回复到哪个微信群即可。第三步:测试一下效果第四步:操作就是这么简单,效果很明显。完美通过…

    2022年10月1日
    4
  • RGB与YIQ的转换

    RGB与YIQ的转换YIQ 是 NTSC NationalTele 电视系统标准 Y 是提供黑白电视及彩色电视的亮度信号 Luminance 即亮度 Brightness I 代表 In phase 色彩从橙色到青色 Q 代表 Quadrature phase 色彩从紫色到黄绿色 优点较其他颜色空间 YIQ 颜色空间具有能将图像中的亮度分量分离提取出来的优点 并且 YIQ

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号