2012-10-24 97 views
1

我需要统计所有FirstExtracted为特定的日期,我需要统计所有LastExtracted为同一日期。所以,今天,我需要所有FirstExtractedLastExtracted等于2012-10-24如何统计所有结果和计数具体在同一个查询 - MySql

这是我到目前为止,但它没有带来LastExtracted。它输出LastExtracted的数量相同FirstExtracted

(SELECT LastExtracted,FirstExtracted, 
COUNT(FirstExtracted) AS FirstCount, 
COUNT(LastExtracted) AS LastCount, 
DATE_FORMAT(`LastExtracted`,'%Y-%m-%d') AS Lastdate, 
DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') AS Firstdate 
FROM results 
WHERE DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') = DATE_FORMAT(`LastExtracted`,'%Y-%m-%d')) 
UNION ALL 
(SELECT LastExtracted,FirstExtracted, 
COUNT(FirstExtracted) AS FirstCount, 
COUNT(LastExtracted) AS LastCount, 
DATE_FORMAT(`LastExtracted`,'%Y-%m-%d') AS Lastdate, 
DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') AS Firstdate 
FROM results 
WHERE DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') = DATE_FORMAT(`LastExtracted`,'%Y-%m-%d') GROUP BY Firstdate) 
ORDER BY Firstdate DESC 
LIMIT 20 

也许我应该使用内部联接?

更新: 所以使用您的查询,我做了一些更改,使它现在为我做了别的事情。如果你看一下这个页面我把查询了

semesterold.com/code2.html

我想指望由艺术家所有标题和组。这将是一个数组。那么我希望子查询通过匹配艺术家的searchtype进行计数。所以如果db有akon,rihanna,chris brown。我希望它能够统计出每个艺术家有多少个标题,比如说akon有100个。然后我想要显示标题数量,然后统计这100个标题中有多少是Google,bing,特定于akon的站点等。

+0

什么是表格定义? –

+0

表格定义是什么意思? –

回答

0

我会使用union得到两个结果(FirstExtracted和LastExtracted)分开,然后使用子查询合并。

SELECT 
    sub.date, sum(sub.FirstCount) AS FirstCount, 
    sum(sub.LastCount) AS LastCount 
    FROM (
     SELECT 
      DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') AS date, 
      COUNT(FirstExtracted) AS FirstCount, 0 AS LastCount 
     FROM results 
     GROUP BY date 
     UNION ALL 
     SELECT 
      DATE_FORMAT(`LastExtracted`,'%Y-%m-%d'), 
      0, COUNT(LastExtracted) 
      FROM results 
      GROUP BY date 
    ) AS sub 
    GROUP BY sub.date 

说你今天萃取今日最近提取第一时间和292 220项。其中用于其它日期的条目,这将给你:

+------------+------------+-----------+ 
| date  | FirstCount | LastCount | 
+------------+------------+-----------+ 
| 2012-10-24 |  220 |  292 | 
+------------+------------+-----------+ 

更新单独的UNION会给你下面的结果。注意零占位符。

+------------+------------+-----------+ 
| date  | FirstCount | LastCount | 
+------------+------------+-----------+ 
| 2012-10-24 |  220 |   0 | 
+------------+------------+-----------+ 
| 2012-10-24 |   0 |  292 | 
+------------+------------+-----------+ 
+0

这工作完美!你能解释一下你是如何做到的以及零是什么?我对理解它很感兴趣。 –

+0

“UNION”中的第一个查询仅选择给定日期的“FirstExtracted”的计数。第二个抓取给定日期的'LastExtracted'计数。两者都使用零作为其他占位符。然后,外部查询按日期将两个合并为一行,因此220 + 0和0 + 292会给出上述结果。 – qsheets

+0

但在第二部分中,您选择了DATE_FORMAT(xx),0,COUNT(LastExtracted)为什么会有零?还有,当你把sub.date这意味着它从联合查询调用日期,所以你可以选择它们运行之前在联合查询中的变量?我认为sql按顺序进行。如果你调用sub.date和sum(sub.FirstCount),它们还没有被定义,直到FROM之后。这非常有趣。 –

0

我建议在查询中添加DISTINCT

(SELECT LastExtracted,FirstExtracted, 
COUNT(DISTINCT FirstExtracted) AS FirstCount, 
COUNT(DISTINCT LastExtracted) AS LastCount, 
DATE_FORMAT(`LastExtracted`,'%Y-%m-%d') AS Lastdate, 
DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') AS Firstdate 
FROM results 
WHERE DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') = DATE_FORMAT(`LastExtracted`,'%Y-%m-%d')) 
UNION ALL 
(SELECT LastExtracted,FirstExtracted, 
COUNT(DISTINCT FirstExtracted) AS FirstCount, 
COUNT(DISTINCT LastExtracted) AS LastCount, 
DATE_FORMAT(`LastExtracted`,'%Y-%m-%d') AS Lastdate, 
DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') AS Firstdate 
FROM results 
WHERE DATE_FORMAT(`FirstExtracted`,'%Y-%m-%d') = DATE_FORMAT(`LastExtracted`,'%Y-%m-%d') GROUP BY Firstdate) 
ORDER BY Firstdate DESC 
LIMIT 20 
+0

这将如何帮助?只是好奇,因为它似乎希望将同一日期第一次或最后一次提取的所有条目加起来,同时保持第一次和最后一次分开。使用'DISTINCT'使得它看起来像只计算不同日期而不是同一日期的日期。 – qsheets

相关问题