分解SQL代码 - MS SQL Server

3

SQL Fiddle目前无法提供MS SQL Server代码支持,因此这里提供一个包含我使用的模式DDL的.txt文件的Dropbox链接:

https://www.dropbox.com/s/6si4r37449q3ajb/DDL.txt?dl=0

我正在备考考试,并想知道是否有更有效的编码方式。我的代码可以工作,但感觉冗长。

查找安装在多台计算机上的软件包。

这是我的解决方案:

select software_packs_on_more_than_one_pc
from(
    Select software.PACK as software_packs_on_more_than_one_pc, 
    count(pc.tagnum) as num_installs_per_pack
    from software
    inner join pc on software.TAGNUM=pc.tagnum
    group by software.PACK
    ) as SubQuery
where num_installs_per_pack > 1

5
请查看 having 子句。 - APH
2个回答

2

您可以使用HAVING来过滤安装在多台电脑上的软件包,从而消除子查询:

SELECT
    s.PACK AS software_packs_on_than_on_pc
FROM software s
INNER JOIN pc p ON
    s.TAGNUM = p.tagnum
GROUP BY s.PACK
HAVING COUNT(p.tagnum) > 1

注意:

  • 使用有意义的别名给你的表和列命名是一种良好的实践,可以提高可读性。

1

您不需要内部查询 - 您可以在having子句中应用聚合计数的条件:

SELECT   s.pack
FROM     software s
JOIN     pc p on s.tagnum = p.tagnum
GROUP BY s.pack
HAVING   COUNT(*) > 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接