【问题标题】:sql "Group By" and "Having"sql“分组依据”和“拥有”
【发布时间】:2014-02-18 21:51:47
【问题描述】:

我正在尝试解决一些问题,但我不确定如何执行以下操作

问:在两台或多台电脑中找出相同的硬盘大小。

site 上的 q15。

数据库方案由四个表组成:

Product(maker, model, type)
PC(code, model, speed, ram, hd, cd, price)
Laptop(code, model, speed, ram, hd, screen, price)
Printer(code, model, color, type, price)

任何指针将不胜感激。

编辑:这里是 pc 表中所有硬盘的列表以及正确答案应该是什么。

【问题讨论】:

  • 非常感谢 Femaref
  • 伙计,这个网站需要注册。由于这里有一个问题,我不会在我不知道的网站上注册。请在此处粘贴相关信息。
  • 我知道,因此我在原始问题中发布了大部分信息,并且仅在有人已经注册的情况下才包含链接。
  • 当您说找到两台或多台 PC 之间相同的硬盘大小时,您的意思是 PC 对吗?因此产品、笔记本电脑和打印机表是无关紧要的。
  • 这是一个“查找重复项”问题,具有讽刺意味的是,它在其他地方被重复了;例如stackoverflow.com/questions/197111/…

标签: sql sql-server


【解决方案1】:

这个怎么样?

Select PC.hd From PC
group by PC.hd
Having Count(PC.hd) >= 2

【讨论】:

    【解决方案2】:
    SELECT DISTINCT p1.hd
      FROM PC p1
      JOIN PC p2
        ON p1.code <> p2.code
     WHERE p1.hd = p2.hd
    

    【讨论】:

    • 嗨 Petar,它返回以下错误:Ambiguous column name 'hd'。
    • 将第一行更改为“Select distinct p1.hd”即可。谢谢兄弟!
    【解决方案3】:

    假设:pc.code 是主键。

    SELECT DISTINCT a.hd
      FROM pc a
     WHERE EXISTS
           (SELECT *
              FROM pc b
             WHERE a.hd = b.hd
               AND a.code != b.code)
    

    【讨论】:

    • 电脑的代码。 a 是台式电脑的别名。如果它有效,你也可以尝试运行我的查询。我有兴趣:)
    • 觉得我需要休息一下。干杯 Petar!
    【解决方案4】:

    试试这个

    select hd from pc group by hd having count(hd)&gt;1

    我注册并尝试了这个,它说对了。

    【讨论】:

      【解决方案5】:
      SELECT hd FROM PC GROUP BY hd HAVING COUNT(hd)>1
      

      没错。

      您的查询结果:

      hd
      5.0
      8.0
      10.0
      14.0
      20.0
      

      【讨论】:

        猜你喜欢
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-19
        相关资源
        最近更新 更多