使用group by从同一个表中查询同一列两次

时间:2017-10-29 17:55:49

标签: mysql database

我有以下查询,它给出了过去两周内患者请求的计数。

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

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

sudo chown -R your_login_name /path/to/folder

但是案件完全被忽略了,我被赋予了WHERE子句中的任何内容。

1 个答案:

答案 0 :(得分:0)

count计算得到的非null值的数量。由于0不是null,因此它也会被计算在内。您可以将else子句更改为显式返回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,