Mysql uld更容易理解,如果我使用它,我会将第二个查询包装在第一个查询周围。这就是我在第一个查询中使用括号的原因。但这更多的是一个风格问题。不过,使用“左连接”时,这是如何工作的呢?然后,您是否需要将TableA临时放置在某个位置,或者在“From”和所有“le

Mysql uld更容易理解,如果我使用它,我会将第二个查询包装在第一个查询周围。这就是我在第一个查询中使用括号的原因。但这更多的是一个风格问题。不过,使用“左连接”时,这是如何工作的呢?然后,您是否需要将TableA临时放置在某个位置,或者在“From”和所有“le,mysql,optimization,Mysql,Optimization,uld更容易理解,如果我使用它,我会将第二个查询包装在第一个查询周围。这就是我在第一个查询中使用括号的原因。但这更多的是一个风格问题。不过,使用“左连接”时,这是如何工作的呢?然后,您是否需要将TableA临时放置在某个位置,或者在“From”和所有“left join”查询中执行TableA查询?要验证您是否获得了所有用户,您应该从原始表开始并从那里进行left join,即,选择users.name、users.queryuserid、A.cnt、B.cnt From users left


uld更容易理解,如果我使用它,我会将第二个查询包装在第一个查询周围。这就是我在第一个查询中使用括号的原因。但这更多的是一个风格问题。不过,使用“左连接”时,这是如何工作的呢?然后,您是否需要将TableA临时放置在某个位置,或者在“From”和所有“left join”查询中执行TableA查询?要验证您是否获得了所有用户,您应该从原始表开始并从那里进行left join,即,
选择users.name、users.queryuserid、A.cnt、B.cnt From users left join tabla as A on(…)在(…)上以B的形式左键联接表格B等等
在特定月份没有输入的用户将得到一个空结果,这很快,非常快。我会用它来替换其他地方的转置代码,但我不确定我能不能用它来解决这个问题。他们在这里的一个要求是他们能够在一个小的时间范围内过滤用户/api用户,并让每个人都出现。包括下载量为0的。由于这是基于stats_下载表,它不会显示是否有0个条目。@neuron,我已经更新了查询,以预查询不同的用户/名称,并对stats进行左连接。现在,您可以根据特定的人员和/或日期范围进行筛选。你可以把WHERE子句放在“AllUsers”预查询中,也可以调整日期。我很敬畏。。。我的旧查询花了大约一分钟的时间才按下ctrl+c组合键,我很清楚我无法在生产环境中使用它。这是两个独立的月份被纳入统计。您的查询:3秒!(这需要12个月的时间……)有很多人编写好的SQL示例,关注他人,即使这是一次学习经验。你也可以点击一个人来查看他们所做/提供的所有不同的问题和答案。在他们的“个人资料”区域的底部,还列出了他们参与的标签。。。点击它,它会缩小他们的答案范围,仅限于那些点击该类别标签的人。一些非常复杂的问题。这真的可以让你的思维滚动,更好地理解你的学习方式中的结构和关系…谢谢!我在stackoverflow上花费了越来越多的时间,但是人员和信息的数量可能是巨大的。标签技巧帮助很大!很快,很快。我会用它来替换其他地方的转置代码,但我不确定我能不能用它来解决这个问题。他们在这里的一个要求是他们能够在一个小的时间范围内过滤用户/api用户,并让每个人都出现。包括下载量为0的。由于这是基于stats_下载表,它不会显示是否有0个条目。@neuron,我已经更新了查询,以预查询不同的用户/名称,并对stats进行左连接。现在,您可以根据特定的人员和/或日期范围进行筛选。你可以把WHERE子句放在“AllUsers”预查询中,也可以调整日期。我很敬畏。。。我的旧查询花了大约一分钟的时间才按下ctrl+c组合键,我很清楚我无法在生产环境中使用它。这是两个独立的月份被纳入统计。您的查询:3秒!(这需要12个月的时间……)有很多人编写好的SQL示例,关注他人,即使这是一次学习经验。你也可以点击一个人来查看他们所做/提供的所有不同的问题和答案。在他们的“个人资料”区域的底部,还列出了他们参与的标签。。。点击它,它会缩小他们的答案范围,仅限于那些点击该类别标签的人。一些非常复杂的问题。这真的可以让你的思维滚动,更好地理解你的学习方式中的结构和关系…谢谢!我在stackoverflow上花费了越来越多的时间,但是人员和信息的数量可能是巨大的。标签技巧帮助很大!
SELECT name,queryuserid,count(ROWA.id) ,count(ROWB.id) 
FROM (SELECT IFNULL(u.name, au.companyname) AS name,IFNULL(u.id, au.id) AS queryuserid
    FROM apiusers as au, users as u 
    GROUP BY 2 ) AS users 
LEFT JOIN stats_download as ROWA ON ROWA.userid=queryuserid AND ROWA.date > date('2011-01-01') AND ROWA.date < date('2011-02-01') 
LEFT JOIN stats_download as ROWB ON ROWB.userid=queryuserid AND ROWB.date > date('2011-01-01') AND ROWB.date < date('2011-02-01') 
GROUP BY 2;
(
SELECT name,queryuserid,count(stats_download.id) as cnt,GETMONTH(stats_download.date) as month
FROM (SELECT IFNULL(u.name, au.companyname) AS name,IFNULL(u.id, au.id) AS queryuserid
    FROM apiusers as au, users as u 
    GROUP BY 2 ) AS users 
LEFT JOIN stats_download ON stats_download.userid=queryuserid
GROUP BY name, queryuserid, GETMONTH(stats_download.date)
) as TableA
Select name, queryuserid, A.cnt as January, B.cnt as February from TableA left join TableA as A on (TableA.queryuserid = A.queryuserid and A.month=1) left join TableA as B on (TableA.queryuserid = B.queryuserid and B.month=2)
SELECT 
      AllUsers.Name,
      AllUsers.QueryUserID,
      SUM( if( SD.Date BETWEEN '2011-01-01' and '2011-01-31', 1, 0 )) as CountJan2011,
      SUM( if( SD.Date BETWEEN '2011-02-01' and '2011-02-28', 1, 0 )) as CountFeb2011,
      SUM( if( SD.Date BETWEEN '2011-03-01' and '2011-03-31', 1, 0 )) as CountMar2011,
      SUM( if( SD.Date BETWEEN '2011-04-01' and '2011-04-30', 1, 0 )) as CountApr2011,
      SUM( if( SD.Date BETWEEN '2011-05-01' and '2011-05-31', 1, 0 )) as CountMay2011,
      SUM( if( SD.Date BETWEEN '2011-06-01' and '2011-06-30', 1, 0 )) as CountJun2011,
      SUM( if( SD.Date BETWEEN '2011-07-01' and '2011-07-31', 1, 0 )) as CountJul2011,
      SUM( if( SD.Date BETWEEN '2011-08-01' and '2011-08-31', 1, 0 )) as CountAug2011,
      SUM( if( SD.Date BETWEEN '2011-09-01' and '2011-09-30', 1, 0 )) as CountSep2011,
      SUM( if( SD.Date BETWEEN '2011-10-01' and '2011-10-31', 1, 0 )) as CountOct2011,
      SUM( if( SD.Date BETWEEN '2011-11-01' and '2011-11-30', 1, 0 )) as CountNov2011,
      SUM( if( SD.Date BETWEEN '2011-12-01' and '2011-12-31', 1, 0 )) as CountDec2011
  FROM
      ( select distinct 
                APIUsers.CompanyName as Name,
                APIUsers.QueryUserID
           from APIUsers
        UNION
        select 
              Users.Name,
              Users.QueryUserID
           from Users ) AllUsers

      LEFT JOIN stats_download SD
          ON AllUsers.QueryUserID = SD.UserID
         AND SD.Date BETWEEN '2011-01-01' and '2011-12-31'
   GROUP BY 
      2;