我有两个表Lossess_tab和numbers_tab。 Losses_tab包含每个项目的损失。损失将导致一个项目的总损失.numbers_tab包含每个项目的数字。数字的数字将获得项目的总数。
CREATE TABLE IF NOT EXISTS `losses_tab` (`id` bigint(20) unsigned NOT NULL,`item_id` varchar(50) NOT NULL,`loss` varchar(120) NOT NULL);
INSERT INTO `losses_tab` (`id`, `item_id`, `loss`) VALUES (1,100,1.5),(2,100,1.8),(3,102,1.0),(4,103,1.0),(5,101,0),(6,102,1);
CREATE TABLE IF NOT EXISTS `numbers_tab` (
`item_id` varchar(50) NOT NULL,
`number` varchar(120) NOT NULL);
INSERT INTO `numbers_tab` ( `item_id`, `number`) VALUES
(100,10),(100,12),(102,1),(103,25),(101,16),(103,9),(102,8);
我希望结果为
------------------------------------------------
| item_id | total loss | total number |
------------------------------------------------
| 100 | 3.3 | 22 |
------------------------------------------------
| 101 | 0 | 16 |
------------------------------------------------
| 102 | 2.0 | 9 |
------------------------------------------------
| 103 | 1.0 | 34 |
------------------------------------------------
这里是我的小提琴链接Link to view the fiddle
TABLE loss_tab
id item_id loss
1 100 1.5
2 100 1.8
3 102 1.0
4 103 1.0
5 101 0
6 102 1
TABLE numbers_tab
item_id number
100 10
100 12
102 1
103 25
101 16
103 9
102 8
答案 0 :(得分:1)
尝试
select item_id, sum(loss) as total_loss,
(select sum(number) from numbers_tab nt where nt.item_id = losses_tab.item_id) as total_number
from losses_tab group by item_id
答案 1 :(得分:1)
USE DISTINCT(SUM())
,JOIN
,GROUP_BY
比子查询快得多。
SELECT
l.item_id,sum(distinct(l.loss)) 'total_loss',sum(distinct(n.number)) 'total_number'
FROM
losses_tab l
INNER JOIN numbers_tab n
ON n.item_id = l.item_id
group by l.item_id,n.item_id
order by l.item_id
答案 2 :(得分:0)
SELECT * FROM
(SELECT item_id, sum(loss) total_loss FROM losses_tab GROUP BY item_id) losses_tab
INNER JOIN
(SELECT item_id, sum(number) total_number FROM numbers_tab GROUP BY item_id) numbers_tab
ON losses_tab.item_id = numbers_tab.item_id
编辑:更改了查询。项目ID为group by
,然后是inner join
。
答案 3 :(得分:0)
您正在寻找的是一个内部联接,其中添加了一些简单的聚合函数:
select
nu.item_id,
sum(tb.loss) as 'Total Loss',
sum(nu.loss) as 'Total Number'
from
numbers nu
join losses_tab tb
on nu.item_id=tb.item_id
group by
nu.item_id
你可以在一段很长的Q& A中获得关于这些类型的查询的更多信息,我在一段时间之前写了这些问题,以帮助解释这类问题。