【问题标题】:factoring SQL code - MS SQL Server分解 SQL 代码 - MS SQL Server
【发布时间】:2016-08-30 20:03:05
【问题描述】:

SQL Fiddle 目前在 MS SQL Server 代码方面处于关闭状态,因此这里有一个指向 .txt 的保管箱链接,其中包含用于创建我正在使用的架构的 DDL:

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

【问题讨论】:

  • 查看having 子句

标签: sql sql-server database sql-server-2008 select


【解决方案1】:

您可以通过使用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

注意:

  • 最好对表和列使用有意义的别名以提高可读性。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多