【问题标题】:SQL Count(*) and then show column of those resultsSQL Count(*) 然后显示这些结果的列
【发布时间】:2019-07-11 12:31:41
【问题描述】:

这可能是一个简单的问题,但我对此有些苦恼。

SELECT
    DAY, PLACEMENT, SECLEVEL, COUNT(*)
FROM
    SECPEOPLE
GROUP BY
    DAY, PLACEMENT, SECLEVEL
HAVING 
    COUNT(*) > 1

这会返回重复的人,他们在同一地点、同一天和同一秒级别。

这一切都很好,问题是我如何完成这个查询,而不是这个信息,我得到重复的唯一 ID?

同一张表的“ID”列是唯一的。

【问题讨论】:

    标签: sql oracle count


    【解决方案1】:

    您可以使用分析函数来做到这一点:

    SELECT id, day, placement, seclevel
    FROM (
        SELECT id, day, placement, seclevel, 
               count(*) over (partition by day, placement, seclevel) as cnt
        FROM secpeople
    ) t
    WHERE cnt > 1;
    

    【讨论】:

      【解决方案2】:

      一个简单的方法使用exists

      SELECT p.*
      FROM SECPEOPLE p
      WHERE EXISTS (SELECT 1
                    FROM SECPEOPLE p2
                    WHERE p2.day = p.day AND
                          p2.PLACEMENT = p.PLACEMENT AND
                          p2.SECLEVEL = p.SECLEVEL AND
                          p2.<id> <> p.<id>
                    )
      ORDER BY DAY, PLACEMENT, SECLEVEL
      

      【讨论】:

        【解决方案3】:

        将连接与 cte 一起使用

        with cte as
        (
           SELECT
                DAY, PLACEMENT, SECLEVEL, COUNT(*)
            FROM
                SECPEOPLE
            GROUP BY
                DAY, PLACEMENT, SECLEVEL
            HAVING 
                COUNT(*) > 1
            ) select a.id from cte join SECPEOPLE a on cte.DAY=a.DAY and cte.PLACEMENT=a.PLACEMENT and cte.SECLEVEL=a.SECLEVEL
        

        【讨论】:

          【解决方案4】:

          或者,如果你想使用你写的查询

          SELECT *
            FROM secpeople
           WHERE (day, placement, seclevel) IN 
             (-- this is your query
              SELECT DAY, PLACEMENT, SECLEVEL
              FROM SECPEOPLE
              GROUP BY DAY, PLACEMENT, SECLEVEL
              HAVING COUNT (*) > 1
             )
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-07-06
            • 2018-09-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多