使用group by查询同一张表中的同一列两次

Fuad Zeyad Tareq

我有以下查询,可以查询过去2周内的患者请求数量。

SELECT DISTINCT table_posts.post_author, COUNT(table_posts.post_author) AS leaderboard, 
table_users.ID, table_users.display_name, f.meta_value
    FROM table_posts
      INNER JOIN table_users
      ON table_posts.post_author = table_users.ID
      INNER JOIN table_frm_items
      ON table_posts.post_author=table_frm_items.user_id AND table_frm_items.form_id='11'
      INNER JOIN table_frm_item_metas AS f
      ON table_frm_items.id=f.item_id AND f.field_id='134'
    WHERE table_posts.post_type = 'patient_requests' AND (table_posts.post_date BETWEEN '2017-10-15' AND '2017-11-01')
    GROUP BY table_posts.post_author
    ORDER BY leaderboard DESC

我想修改此查询,以添加另一列来比较前2周的结果。因此,当前专栏为我提供了10月15日至11月1日之间收到的请求计数,我想添加的专栏是将其与上一个时间轴10月1日至10月15日进行比较。我一直在寻找一种简单的解决方案,但还没有没找到一个。我觉得这不应该太复杂,但是我尝试了多种解决方案,包括以下内容:

SELECT DISTINCT table_posts.post_author, 
    COUNT(CASE WHEN (table_posts.post_date BETWEEN '2017-10-15' AND '2017-11-01') THEN table_posts.post_author ELSE 0 END) AS leaderboard1, 
    COUNT(CASE WHEN (table_posts.post_date BETWEEN '2017-10-01' AND '2017-10-15') THEN table_posts.post_author ELSE 0 END) AS leaderboard2, 
    table_users.display_name, f.meta_value
    FROM table_posts
      INNER JOIN table_users
      ON table_posts.post_author = table_users.ID
      INNER JOIN table_frm_items
      ON table_posts.post_author=table_frm_items.user_id AND table_frm_items.form_id='11'
      INNER JOIN table_frm_item_metas AS f
      ON table_frm_items.id=f.item_id AND f.field_id='134'
    WHERE table_posts.post_type IN ('patient_requests') AND (table_posts.post_date BETWEEN '2017-10-01' AND '2017-11-01')
    GROUP BY table_posts.post_author
    ORDER BY leaderboard1 DESC

但是这些案例只是被完全忽略了,我得到了WHERE子句中的所有内容。

穆雷尼克

count计算得到的非null的数量由于0不是null,因此也算在内。您可以将else子句更改为显式return null,或者仅忽略这些子句,因为case默认情况下,返回null在任何子句中都不匹配的值:

COUNT(CASE WHEN wp_posts.post_date BETWEEN '2017-10-15' AND '2017-11-01' 
           THEN wp_posts.post_author 
      END) AS leaderboard1, 
COUNT(CASE WHEN wp_posts.post_date BETWEEN '2017-10-01' AND '2017-10-15') 
          THEN wp_posts.post_author
      END) AS leaderboard2, 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用两个WHERE条件从同一张表中两次选择一列SQL SERVER

使用同一张表中的一列数据比较一列SQL

两次使用同一张表时获取结果

如何使用PXSelectJoinOrderBy联接同一张表两次

在Java中对流使用同一列表两次

我有一个存储过程,需要从同一张表中两次提取信息。如何使用相关名称?

使用同一列两次SELECT或JOIN

使用ffmpeg在同一张图片上两次使用淡入/淡出

如何在WHERE子句中两次使用同一列表?

如何使用Linq to Entities查询同一张表中的存在和不存在

如何在SQL中使用同一列两次获取唯一ID

如何在使用同一张表过滤数据的表中更新列?

左连接同一张表两次但重复一列

在同一列上两次使用CUBE来输出计算结果

在同一列上两次使用WHERE子句?

在一个查询中两次连接同一张表

如何使用Fluent在Vapor 3的同一张表中进行两个JOIN查询?

如何在MySQL的同一张表上使用join合并这两个查询?

SQL查询,使用同一个表两次

使用Vlookup从两张纸上的同一列中获取多个匹配行

在同一活动中两次使用接口

SQL-从同一表中两次选择行而不使用UNION

使用Ecto.Multi在同一事务中两次更新表

如何通过口才查询生成器在与同一张表的关系上使用whereHas?

如何使用 Django 的 ORM 对同一张表进行内部连接查询

当两个外键指向同一张表时如何使用Factory boy

PostgreSQL-它会在同一张表上使用两个索引吗?

SQL:使用同一张表核对数量

在同一张表中使用多个外键