我希望将表中的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*/
查询来完成吗?
感谢
答案 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
周围不需要单引号。