MySQL - 从同一列过滤 - 返回匹配的行和 - 用于过滤的单独列

时间:2015-03-29 23:29:51

标签: mysql

表格 DATA_TABLE 在同一列中有2个不同的数字数据 - Engine_Technical

该表格有一个单独的列 - Engine_Technical_Type - 标识 数据 Engine_Technical 类型 - " CO2排放" " MPG"

该表还有一列 - TECH_Id - 这不是唯一的,并且特定于车辆。

我希望能够制作一个过滤行的查询,这些查询不会与2个单独的输入条件值匹配。

例如:

我想找到 MPG 小于 25 排放 =的车辆,让我们说 17

当我过滤的数据在同一列中时,我只是不确定如何使用两者返回行。

两个单独的查询工作

/ *表示MPG * /

SELECT * FROM `DATA_TABLE` 

WHERE `TECH_Id` = 111

AND `Engine_Technical_Type` = "MPG"

AND `Engine_Technical` < 25

/ *表示CO2 * /

SELECT * FROM `DATA_TABLE` 

WHERE `TECH_Id` = 111

AND `Engine_Technical_Type` = "CO2 EMISSIONS"

AND `Engine_Technical` = 17

|DATA_TABLE|
| TECH_Id | Engine_Technical_Type | Engine_Technical |
------------------------------------------------------
|  111    |     CO2 EMISSIONS     |        15        |
------------------------------------------------------
|  111    |     CO2 EMISSIONS     |        17        |
------------------------------------------------------
|  111    |         MPG           |        15        |
------------------------------------------------------
|  111    |     CO2 EMISSIONS     |        15        |
------------------------------------------------------
|  111    |         MPG           |        35        |
------------------------------------------------------
|  111    |     CO2 EMISSIONS     |        15        |
------------------------------------------------------
|  999   |          MPG           |        10        |
------------------------------------------------------
|  999    |     CO2 EMISSIONS     |        17        |
------------------------------------------------------

期望的结果:

|VEHICLE|
|ID|| TECH_Id |     CO2 EMISSIONS     |       MPG        |
----------------------------------------------------------
 1  |   111   |          17           |        15        |
----------------------------------------------------------

我只需要在一个查询中执行此操作,并将MPG和CO2排放在一个单独的列中。 任何帮助,将不胜感激。 谢谢。

2 个答案:

答案 0 :(得分:1)

考虑使用case

select id, tech_id
     , sum(case engine_technical_type
           when 'CO2 EMISSIONS' then engine_technical
       end) as co2_emissions
     , sum(case engine_technical_type
           when 'MPG' then engine_technical
       end) as mpg
from data_table
group by id

答案 1 :(得分:1)

SELECT tech_id,
       MAX(CASE WHEN Engine_Technical_Type = 'MPG' THEN Engine_Technical END) as mpg,
       MAX(CASE WHEN Engine_Technical_Type = 'CO2 EMISSIONS' THEN Engine_Technical END) as co2_emissions
FROM `DATA_TABLE` 
WHERE `TECH_Id` = 111 AND
      ((Engine_Technical_Type = 'MPG' AND Engine_Technical < 25) OR
       (Engine_Technical_Type` = 'CO2 EMISSIONS' AND `Engine_Technical` = 17)
      )
GROUP BY tech_id;

我不确定id应该是什么。