2017-09-13 62 views
1

条件,我需要合并三个查询ANS显示在一个表结构我需要合并三个地方在单个查询

SQL查询:

SELECT MonthName(created) as Month ,year(created) as Year ,user_type,count(user_type) 
    FROM `cii_registered_users` 
    WHERE verification=1 
    AND activation_step=5 
    AND status=1 
    AND user_type='1' 
    AND year(created)='2017' 
    AND created > CURDATE() - INTERVAL 3 MONTH 
    GROUP BY user_type,month(created),year(created) 

SELECT MonthName(created) as Month ,year(created) as Year ,user_type,count(user_type) 
    FROM `cii_registered_users` 
    WHERE verification=1 
    AND activation_step=5 
    AND status=1 
    AND user_type='2' 
    AND year(created)='2017' 
    AND created > CURDATE() - INTERVAL 3 MONTH 
    GROUP BY user_type,month(created),year(created) 

SELECT MonthName(created) as Month ,year(created) as Year ,user_type,count(user_type) 
    FROM `cii_registered_users` 
WHERE verification=1 
    AND activation_step=5 
    AND status=1 
    AND user_type='3' 
    AND year(created)='2017' 
    AND created > CURDATE() - INTERVAL 3 MONTH 
GROUP BY user_type,month(created),year(created) 

然后我需要单独一行显示用户类型和总计数除三个之外,间隔总数的种种罪状

Month  Year count(user_type=2)  count(user_type=1) full year count 
    June  2017  12      3 
    July  2017  1      17 
    August 2017  10      8 
    September 2017  1      1 

我需要的只是这个4个月

+0

你有什么试过,你有什么问题? – Burki

+0

我需要两个仅仅三个sql查询,如果有可能实现这个 –

+0

这3个查询中的差异是什么?我没有看到它 –

回答

1

这似乎是一个旋转的作业另一列总数排序查询

尝试这样:

SELECT MONTH(created) as Month, 
     YEAR(created) as Year, 
     SUM(user_type = '1') user_type_1, 
     SUM(user_type = '2') user_type_2, 
     SUM(user_type = '3') user_type_3 
    FROM table 
    WHERE whatever 
    GROUP BY MONTH(created), YEAR(created) 

为什么这项工作?因为在MySQL中,像user_type = '1'这样的表达式的值为1,如果为true,则0为假。

为什么这是一个好方法?阅读和验证并不难,在需要时也不难改变。

如果这是我的查询,我会use LAST_DAY()而不是YEAR()MONTH(),如下所示。但也许这只是个人偏好。

SELECT LAST_DAY(created) AS month_ending, 
      ... 
GROUP BY LAST_DAY(created) 
+0

Thanq在总计数被采取在一行之前,如果有可能得到它像 –

+0

一列中的总计数 –

+2

@VallavanJ请不要滥用Stack Overflow作为一个聊天系统。不是。它也不是代码写入服务。我回答了你问的问题,然后你给你的问题添加了一些东西。为了获得最佳结果,请找出如何将您所学到的知识应用于您的问题,然后尝试着解决如何添加所需的其他列。如果你不能解决问题另一个问题。 –