0

首先,对不起我的英语不好:)

我有以下示例表数据:

id 名称 状态 数量
1 name1 打开 2
1 name1 打开 3
1 name1 关闭 4
2 name2 打开 5
2 name2 关闭 8
2 name2 关闭 4


我想汇总每个状态(打开或关闭)和名称(名称 1 或名称 2)的数量数据,如下所示:

id name open(sum amount) close(sum amount)
1 name1 5(2+3) 4
2 name2 5 12(8+4)

有人可以帮助我吗?

4

2 回答 2

2

除了已经选择的答案之外,另一种方法是:

SELECT
     id
    ,name
    ,SUM( IF( state = 'open' ,amount ,0 ) ) open_total
    ,SUM( IF( state = 'closed' ,amount ,0 ) ) closed_total
FROM
    `data`
WHERE
    1
GROUP BY
    name
于 2013-10-19T21:48:22.130 回答
1
SELECT id, name, 
SUM(CASE WHEN state="open" THEN amount else 0 END) AS `open`,
SUM(CASE WHEN state="closed" THEN amount else 0 END) AS `closed`
FROM <yourtablename>
GROUP BY id;

请注意派生列名称中的特殊引号,它们不能被不同类型的引号替换。

于 2013-10-19T21:37:07.723 回答