我如何按 book_id 和 order_id 对金额组求和
How can i sum amount group by book_id and order_id
我有一个 table:
book_id order_id amount
-------- ------- -------
a d1 10
a d1 10
a d1 10
a d2 20
a d2 20
a d3 30
我试试这个
SELECT book_id,sum(amount) as sum FROM table WHERE book_id= 'a' GROUP BY book_id;
结果
book_id sum
-------- -------
a 100
但我想按 book_id 对它们进行分组,并像这样
book_id sum
-------- -------
a 60 ==> d1+d2+d3
如何将 mySQL 写入 SUM 行,如 d1+d2+d3?
试试这个嵌套 SELECT
。
SELECT book_id, SUM(amount) AS `sum` FROM (SELECT DISTINCT book_id, order_id, amount FROM book GROUP BY book_id, order_id) AS a;
结果
book_id sum
------- --------
a 60
鉴于当前数据,您将 SUM
基于 DISTINCT
行:
全部结果:
book_id SUM(amount)
-------------------
a 60
-------------------
WITH cte AS (
SELECT DISTINCT book_id, order_id, amount FROM tbl
)
SELECT book_id
, SUM(amount)
FROM cte
GROUP BY book_id
;
根据需要向 cte
项或最终查询表达式添加过滤。
WITH cte AS (
SELECT DISTINCT book_id, order_id, amount
FROM tbl
WHERE book_id = 'a'
)
SELECT book_id
, SUM(amount)
FROM cte
GROUP BY book_id
;
对于旧版本的 MySQL,您可以使用 derived table
,而不是 CTE
术语:
SELECT book_id
, SUM(amount)
FROM (
SELECT DISTINCT book_id, order_id, amount
FROM tbl
WHERE book_id = 'a'
) AS cte
GROUP BY book_id
;
尝试 SUM(DISTINCT amount)
是不正确的,因为一些不同的订单可能具有相同的 amount
而这些订单将被压缩为一个值。
有两种方法。第一个是 Distinct
:
Select t.book_id, sum(t.amount)
from
(
SELECT DISTINCT book_id, order_id, amount
FROM book
) t
group by t.book_id
第二个是 With
:
WITH w AS (
SELECT DISTINCT book_id, order_id, amount FROM book
)
SELECT book_id, SUM(amount)
FROM w
GROUP BY book_id;
SELECT DISTINCT(book_id), SUM(amount) FROM table GROUP BY book_id WHERE book_id ='a';
我有一个 table:
book_id order_id amount
-------- ------- -------
a d1 10
a d1 10
a d1 10
a d2 20
a d2 20
a d3 30
我试试这个
SELECT book_id,sum(amount) as sum FROM table WHERE book_id= 'a' GROUP BY book_id;
结果
book_id sum
-------- -------
a 100
但我想按 book_id 对它们进行分组,并像这样
book_id sum
-------- -------
a 60 ==> d1+d2+d3
如何将 mySQL 写入 SUM 行,如 d1+d2+d3?
试试这个嵌套 SELECT
。
SELECT book_id, SUM(amount) AS `sum` FROM (SELECT DISTINCT book_id, order_id, amount FROM book GROUP BY book_id, order_id) AS a;
结果
book_id sum
------- --------
a 60
鉴于当前数据,您将 SUM
基于 DISTINCT
行:
全部结果:
book_id SUM(amount)
-------------------
a 60
-------------------
WITH cte AS (
SELECT DISTINCT book_id, order_id, amount FROM tbl
)
SELECT book_id
, SUM(amount)
FROM cte
GROUP BY book_id
;
根据需要向 cte
项或最终查询表达式添加过滤。
WITH cte AS (
SELECT DISTINCT book_id, order_id, amount
FROM tbl
WHERE book_id = 'a'
)
SELECT book_id
, SUM(amount)
FROM cte
GROUP BY book_id
;
对于旧版本的 MySQL,您可以使用 derived table
,而不是 CTE
术语:
SELECT book_id
, SUM(amount)
FROM (
SELECT DISTINCT book_id, order_id, amount
FROM tbl
WHERE book_id = 'a'
) AS cte
GROUP BY book_id
;
尝试 SUM(DISTINCT amount)
是不正确的,因为一些不同的订单可能具有相同的 amount
而这些订单将被压缩为一个值。
有两种方法。第一个是 Distinct
:
Select t.book_id, sum(t.amount)
from
(
SELECT DISTINCT book_id, order_id, amount
FROM book
) t
group by t.book_id
第二个是 With
:
WITH w AS (
SELECT DISTINCT book_id, order_id, amount FROM book
)
SELECT book_id, SUM(amount)
FROM w
GROUP BY book_id;
SELECT DISTINCT(book_id), SUM(amount) FROM table GROUP BY book_id WHERE book_id ='a';