【问题标题】:COUNT of GROUP of two fields in SQL Query -- PostgresSQL 查询中两个字段的 GROUP 的 COUNT -- Postgres
【发布时间】:2021-04-22 04:15:08
【问题描述】:

我在 postgres 中有一个包含 2 个字段的表:它们是在两种情况下查看过某些数据的用户的 id 列:

viewee  viewer
------  ------
93024   66994
93156   93151
93163   113671
137340  93161
92992   93161
93161   93135
93156   93024

我想按查看者和查看者字段对它们进行分组,并计算出现次数,然后返回该计数 从高到低:

id       count
------   -----
93161    3
93156    2
93024    2
137340   1
66994    1
92992    1
93135    1
93151    1
93163    1

我一直在运行两个查询,每列一个,然后在我的 JavaScript 应用程序代码中组合结果。我对一个字段的查询是...

SELECT "viewer",
    COUNT("viewer")
        FROM "public"."friend_currentfriend"
            GROUP BY "viewer"
            ORDER BY  count DESC;

如何重写此查询以同时处理两个字段?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您可以使用 union all 将表格中的列合并为一个列,然后使用 group by 如下:

    select id ,count(*) Count from (
    select viewee id from vv
    union all
    select viewer id from vv) t
    group by id
    order by count(*) desc
    

    结果:

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      SELECT      a.ID,
                  SUM(a.Total) as Total
      FROM        (SELECT     t.Viewee AS ID,
                              COUNT(t.Viewee) AS Total
                   FROM       #Temp t
                   GROUP BY   t.Viewee
                   UNION
                   SELECT     t.Viewer AS ID,
                              COUNT(t.Viewer) AS Total
                   FROM       #Temp t
                   GROUP BY   t.Viewer
                  ) a 
      GROUP BY    a.ID
      ORDER BY    SUM(a.Total) DESC
      

      【讨论】:

        【解决方案3】:

        这是使用横向连接的好地方:

        select v.viewx, count(*)
        from t cross join lateral
             (values (t.viewee), (t.viewer)) v(viewx)
        group by v.viewx
        order by count(*) desc;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-09
          • 2015-01-22
          • 1970-01-01
          • 2014-04-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多