Php 如何在1个SQL查询中获得2个条件下的2个和?

Php 如何在1个SQL查询中获得2个条件下的2个和?,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一张如下所示的表格。在类型为1和类型为2的情况下,如何选择“总和”列价格?我希望在一个查询中得到type=1的价格和type=2的价格的总和 +-----+------+-------+ | PID | Type | Price | +-----+------+-------+ | 1 | 1 | 100 | | 2 | 2 | 65 | | 3 | 1 | 300 | | 4 | 1 | 200 | | 5 | 2 |

我有一张如下所示的表格。在类型为1和类型为2的情况下,如何选择“总和”列价格?我希望在一个查询中得到type=1的价格和type=2的价格的总和

+-----+------+-------+
| PID | Type | Price |
+-----+------+-------+
|   1 |    1 |   100 |
|   2 |    2 |    65 |
|   3 |    1 |   300 |
|   4 |    1 |   200 |
|   5 |    2 |    50 |
+-----+------+-------+
我已尝试此操作,但它返回一个错误:

$this->db->select("SUM(price) as total1, (SELECT SUM(price) where type=2) as total2");
$this->db->from('table');
$this->db->where('type', '1');
$query = $this->db->get();
$result = $query->result();

我还尝试了其他几种编写查询的方法,但都没有用,而我在SO中找到的所有其他方法对于我的简单查询来说都太复杂、太多了。我认为这应该是一个非常简单的查询。

这将为您提供两个总数:

SELECT
    SUM(IF(type=1,price,0)) AS Total1,
    SUM(IF(type=2,price,0)) AS Total2
FROM table
WHERE type in (1,2)

这将为您提供两个总数:

SELECT
    SUM(IF(type=1,price,0)) AS Total1,
    SUM(IF(type=2,price,0)) AS Total2
FROM table
WHERE type in (1,2)
试试这个:

$this->db->select("SUM(price) as total1, (SELECT SUM(price) from table where type=2) as total2");
$this->db->from('table');
$this->db->where('type', '1');
$query = $this->db->get();
$result = $query->result();
SELECT type, SUM(price) FROM test GROUP BY type
试试这个:

$this->db->select("SUM(price) as total1, (SELECT SUM(price) from table where type=2) as total2");
$this->db->from('table');
$this->db->where('type', '1');
$query = $this->db->get();
$result = $query->result();
SELECT type, SUM(price) FROM test GROUP BY type
依我看,B组是符合您要求的最佳选项2

备选案文1:

PS:您还可以在“类型”列上使用“分组依据”

使用分组方式选项2:

依我看,B组是符合您要求的最佳选项2

备选案文1:

PS:您还可以在“类型”列上使用“分组依据”

使用分组方式选项2:

我刚刚试过mysql

试试这个:

$this->db->select("SUM(price) as total1, (SELECT SUM(price) from table where type=2) as total2");
$this->db->from('table');
$this->db->where('type', '1');
$query = $this->db->get();
$result = $query->result();
SELECT type, SUM(price) FROM test GROUP BY type
我刚刚试过mysql

试试这个:

$this->db->select("SUM(price) as total1, (SELECT SUM(price) from table where type=2) as total2");
$this->db->from('table');
$this->db->where('type', '1');
$query = $this->db->get();
$result = $query->result();
SELECT type, SUM(price) FROM test GROUP BY type
对类型2也要这样做



对类型2也要这样做。

当前查询的结果是什么?此查询返回正确的计算选择SUMprice作为total1,从堆栈中选择SUMprice作为total2,其中type=2作为堆栈中的total21@RahulSharma如果SQL中有错误,则返回错误syntax@RahulSharma我的实际问题是,按照您的解决方案:$this->db->selectSUMtransaction\u disc作为total1,从transaction\u type=2的事务中选择SUMtransaction\u disc作为transaction\u type=1的事务中的total2;当前查询的结果是什么?此查询返回正确的计算选择SUMprice作为total1,从类型为2的堆栈中选择SUMprice作为类型为2的堆栈中的total21@RahulSharma如果SQL中有错误,则返回错误syntax@RahulSharma我的实际查询,按照您的解决方案:$this->db->selectSUMtransaction\u disc as total1,从事务类型为2的事务中选择SUMtransaction\u disc作为事务类型为1的事务中的total2;是的,这确实有效,但结果返回两行,我希望结果只返回一行,如数组'total1'=>500,'total2'=>250是的,这确实有效,但结果返回两行,我希望结果只返回一行,如数组'total1'=>500,'total2'=>250这确实返回正确的总计,但有两行,我希望在一行中包含total1和total2,还有其他类型我不想计算,只有类型1和类型2。这确实返回正确的总计,但在两行中,我希望在一行中包含total1和total2,还有其他类型我不想计算,仅键入1和键入2。这两种方法都返回两行结果,我希望结果返回一行,如数组[0]“total1”=>500,“total2”=>1000这是一行两列,仅group by在这里返回两行。@Charas您接受的答案和我给定的答案都返回相同格式的数据。只是因为你提到它没有以正确的格式返回。顺便说一句,干杯,你得到了答案这两种方法都返回两行结果,我希望结果返回一行,例如数组[0]'total1'=>500,'total2'=>1000这是一行两列,只有group by在这里返回两行。@Charas您接受的答案和我给定的答案都返回相同格式的数据。只是因为你提到它没有以正确的格式返回。顺便说一句,干杯,你得到了答案谢谢你,伙计!正是我要找的汉克斯伙计!正是我要找的