1

1つのクエリ内で複数の集計関数を実行することは可能ですか?

私はwheが使用できることを知っています

SELECT SUM(value) FROM mytable WHERE date  between '2012-05-01' AND '2012-06-01'

私は例を作ろうとしてきました

CREATE TABLE mytable
    (id varchar(10), value int, `date` date, situation varchar(10) ) ;

INSERT INTO mytable
    (id, value, date, situation)
VALUES
    ('id0', 1338, '2012-05-14','Urgent'),
    ('id0', 3572, '2012-05-13','Urgent'),
    ('id0', 3232, '2012-05-06','Urgent'),
    ('id0', 3068, '2012-05-05','Post'),
    ('id0', 3363, '2012-05-04','Urgent'),
    ('id0', 2022, '2012-04-28','Anual'),
    ('id0', 3193, '2012-04-24','Post')

しかし、同じクエリを使用して他の集計値を取得することは可能ですか?

SELECT SUM(value),SUM(value),Count(*) FROM mytable WHERE date  between '2012-05-01' AND '2012-06-01', WHERE date  between '2012-05-01' AND '2012-10-01', Where situation like 'Urgent' 

3つのクエリの代わりに:

SELECT SUM(value) FROM mytable WHERE date  between '2012-05-01' AND '2012-06-01'
SELECT SUM(value) FROM mytable WHERE date  between '2012-05-01' AND '2012-10-01'
SELECT Count(*)   FROM mytable Where situation like 'Urgent'
4

2 に答える 2

3

使用事例

select
    sum(case when date between '2012-05-01' AND '2012-06-01' then value else 0 end) as sum1,
    sum(case when date between '2012-05-01' AND '2012-10-01' then value else 0 end) as sum2,
    sum(case when situation like 'Urgent' then 1 else 0 end) as count1
from mytable
于 2012-10-16T17:02:37.090 に答える
1

あなたはできる

SELECT 
SUM(CASE WHEN date  between '2012-05-01' AND '2012-06-01' THEN value ELSE 0 END)
as sum1,
SUM(CASE WHEN date  between '2012-05-01' AND '2012-10-01' THEN value ELSE 0 END)
as sum2,
COUNT(CASE WHEN situation like 'Urgent%' THEN 1 ELSE 0 END)
as cnt1
FROM mytable Where situation like 'Urgent%' OR  date  between '2012-05-01' AND '2012-10-01'

私はあなたがのように%を逃したと思います:like 'Urgent%'ではなくlike 'Urgent'

于 2012-10-16T17:02:56.737 に答える