Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL按和联接两个组_Php_Mysql_Sql_Codeigniter - Fatal编程技术网

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