【问题标题】:SQL Server aggregate functions - how to?SQL Server 聚合函数 - 如何?
【发布时间】:2017-01-29 03:34:23
【问题描述】:

输入表包含2列,即名称和部门

+------+------+
| name | dept |
+------+------+
| A    |  123 |
| B    |  456 |
| A    |  789 |
| C    |  123 |
| A    |  456 |
| B    |  789 |
+------+------+

输出是

name
-----
A

所以这里 A 在 3 个部门(123、456、789)工作。如何检索在所有 3 个部门工作的姓名?

【问题讨论】:

  • 什么定义了alldepartments 还有一张桌子吗?还是您只想将name 与最高计数关联?
  • 这里不只有一个表,我只想检索在所有部门工作的姓名

标签: sql sql-server oracle11g aggregate-functions


【解决方案1】:

试试这个:

SELECT NAME
FROM TABLE1
GROUP BY NAME
HAVING COUNT(DISTINCT DEPT)=(SELECT COUNT(DISTINCT DEPT) FROM TABLE1 )

【讨论】:

  • 感谢 sagar,但如果我们不知道有多少部门,我们想检索在所有部门工作的名称。
  • @AjitKumar 如果适合您,请选择答案。
【解决方案2】:

这可能会对你有所帮助。

SELECT NAME
FROM TABLE1
GROUP BY NAME
HAVING COUNT(DISTINCT DEPT) = 
                             (
                              SELECT COUNT(DISTINCT DEPT)
                              FROM TABLE1
                             )

【讨论】:

    【解决方案3】:

    这是一个使用window function的选项:

    select name
    from (
        select name, count(distinct dept) cnt, 
               count(distinct dept) over () overallcnt
        from yourtable
        group by name
    ) t
    where cnt = overallcnt
    

    【讨论】:

    • 它显示错误,即 OVER 子句不允许使用 DISTINCT。
    • @AjitKumar -- 我以为 oracle 11 支持这一点,但我可能弄错了......
    猜你喜欢
    • 2013-08-14
    • 2020-08-05
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    相关资源
    最近更新 更多