Php SQL按和联接两个组
我有两张桌子,分别是数字和数字。“损失”选项卡包含每个项目的损失。损失之和将获得项目的总损失。数字选项卡包含每个项目的数字。数字之和将获得项目的总数字Php SQL按和联接两个组,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,我有两张桌子,分别是数字和数字。“损失”选项卡包含每个项目的损失。损失之和将获得项目的总损失。数字选项卡包含每个项目的数字。数字之和将获得项目的总数字 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`, `it
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 |
------------------------------------------------
这是我的小提琴链接
表3.1\u选项卡
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
表编号\u选项卡
item_id number
100 10
100 12
102 1
103 25
101 16
103 9
102 8
编辑:已更改查询。两个按
分组,然后按项目id进行内部连接。尝试
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
您要查找的是一个内部联接,其中在查询中添加了一些简单的聚合函数:
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
在我不久前写的一个非常长的问答中,你可以得到更多关于这些类型查询的信息,以帮助你准确地解释这类问题
使用DISTINCT(SUM())
,JOIN
,groupby
比子查询快得多
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
我不想数数。。“数字”选项卡中有关项目\u id的数字之和无法接受此代码..因为您使用的是Distinct关键字。。如果有机会来的话,两件物品的编号相同(比如10)。因此,输出将显示10,而不是显示20(10+10)是,但我使用Distinct
仅仅是因为您的预期结果,您可以使用此查询而不使用Distinct,您将对项目的数量进行预期SUM
。
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