我得到了下表:
**stats**
id INT FK
day INT
value INT
我想创建一个SQL查询,它将在一个语句中对上一天,上周和上个月的值列中的值进行求和。
到目前为止我得到了这个:
select sum(value) from stats as A where A.day > now() - 1
union
select sum(value) from stats as B where B.day > now() - 7
union
select sum(value) from stats as C where C.day > now() - 30
这只返回第一个总和(值),我期待返回3个值。
在不同的查询中运行:select sum(value) from stats as A where A.day > now() - X ( Where x = 1/7/30)
可以正常工作。
查询有什么问题?谢谢!
答案 0 :(得分:4)
UNION
是隐含的。请使用UNION ALL
,如下所示:
SELECT 'last day' ItemType, sum(value) FROM stats as A WHERE A.day > now() - 1
UNION ALL
SELECT 'last week', SUM(value) FROM stats as B WHERE B.day > now() - 7
UNION ALL
SELECT 'last month', SUM(value) FROM stats as C WHERE C.day > now() - 30
请注意:我添加了一个新列ItemType
来指示总和值的类型,无论是last day
,last week
还是{{ 1}}