3

次の表を取得しました。

**stats**

id INT FK
day INT    
value INT

先日、先週、先月の value 列の値を 1 つのステートメントで合計する 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

これは最初の sum(value) だけを返します。3 つの値が返されることを期待していました。

実行中:select sum(value) from stats as A where A.day > now() - X ( Where x = 1/7/30)さまざまなクエリで正常に動作します。

クエリの何が問題になっていますか? ありがとう!

4

1 に答える 1

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 daylast weekまたはであるかを示す新しい列を追加しましたlast month

于 2012-11-07T12:07:08.673 に答える