查询所有年份,但仅查询一次

时间:2019-03-10 19:45:28

标签: php mysql

我有一个表,其中包含ID,开始,状态列。开始是用户获得某种状态并将其保存为unix时间戳的时间。

此表具有数千次匹配,同一年将多次出现在“开始”列中,但我只希望年份一次。

我希望它看起来像这样

year status14Count Status15Count
2013  8235          23423
2014  394          2187
2015  111          111

不是这样

year status14Count Status15Count
2013  8235          23423
2013  8235          23423 
2014  394          2187
2015  111          111

我尝试用“ LIMIT”和BETWEEN进行选择,可以这样做吗? 任何提示和指示都会有所帮助!

3 个答案:

答案 0 :(得分:1)

这是猜测:您没有向我们显示您的查询。我无法告诉您status14Countstatus15Count的去向。但是这种事情应该起作用。您需要聚合函数和GROUP BY。

SELECT YEAR(FROM_UNIXTIME(timestamp)) year,
        SUM(status=14) status14Count,
        SUM(status=15) status15Count
   FROM TABLE
  GROUP BY YEAR(FROM_UNIXTIME(timestamp)) 
  ORDER BY YEAR(FROM_UNIXTIME(timestamp)) 

之所以起作用,是因为status=14之类的表达式为true时为1,为false时为0,而status为NULL时为NULL。

答案 1 :(得分:0)

嗯,GROUP BY不能工作吗?

SELECT * FROM `table` GROUP BY `year`;

答案 2 :(得分:0)

听起来像有条件计数的工作。

SELECT 
 FROM_UNIXTIME(`start`, '%Y') AS `year`, 
 COUNT(CASE WHEN `status` = 14 THEN 1 END) AS status14Count,
 COUNT(CASE WHEN `status` = 15 THEN 1 END) AS status15Count
FROM YourTable
GROUP BY `year`
ORDER BY `year`;