如何和行和获取结果permount mysql php

时间:2017-07-05 02:37:51

标签: php mysql

我希望将表中的SUM与每个月的SUM相对应,例如i 有桌子,像这样:

import re
from lxml import html

tree = html.fromstring(html_source)

span = tree.xpath("//span/span", smart_strings=0)

text = ''.join([re.sub(r"\s+", '', item.text_content()) for item in span])

我尝试使用像这样的查询

no total_a total_b date
1    2        3    2017-06-12
2    1        2    2017-06-13
3    4        8    2017-07-04

但结果只能持续1个月。

SELECT    SUM(total_a) as a, SUM(total_b) as b
FROM      table_visit 
WHERE     YEAR(date) = '2017' 
GROUP BY  MONTH(date)

如果我想要结果给出这样的结果

{ ["a"]=> string(1) "1" ["b"]=> string(1) "6" }

{ /*jan*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*feb*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*mar*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*apr*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*mei*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*jun*/ ["a"]=> string(1) "3" ["b"]=> string(1) "5" /*jul*/ ["a"]=> string(1) "4" ["b"]=> string(1) "8" /*aug*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*sep*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*okt*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*nov*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" /*des*/ ["a"]=> string(1) "0" ["b"]=> string(1) "0" } 注意结果是permonth。可以通过使用/*month*/查询来完成吗?

感谢

1 个答案:

答案 0 :(得分:1)

问题似乎是您没有所有月份的数据。您可以使用left join来获取数据。 。 。这是一种方式:

SELECT  m.mon, SUM(tv.total_a) as a, SUM(tv.total_b) as b
FROM (SELECT 1 as mon UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL
      SELECT 5 as mon UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL
      SELECT 9 as mon UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
     ) m LEFT JOIN
     table_visit tv
     ON MONTH(tv.date) = m.mon
WHERE YEAR(date) = 2017
GROUP BY m.mon;

请注意,我在结果集中包含了月份。我认为这是一个非常好的做法。

另外。 YEAR()返回一个数字。 2017周围不需要单引号。