mysql 如何从GROUP_CONTACT列获取特定值

juzqafwq  于 2022-12-26  发布在  Mysql
关注(0)|答案(3)|浏览(162)

我正在MYSQL中尝试,请建议预期结果
先谢谢你
表一
| 年份|汽车|
| - ------| - ------|
| 二○ ○ ○年|宝马|
| 二○ ○ ○年|铃木马鲁蒂|
| 二○ ○ ○年|丰田|
| 二○ ○一年|大众汽车|
| 二○ ○一年|戴姆勒|
| 二○ ○一年|雪佛兰|
输出
| 年份|汽车|
| - ------| - ------|
| 二○ ○ ○年|宝马、马鲁蒂铃木、丰田|
| 二○ ○一年|大众、戴姆勒、雪佛兰|
预期输出低于
| 年份|车型|丰田|福特|
| - ------| - ------| - ------| - ------|
| 二○ ○ ○年|宝马、马鲁蒂铃木、丰田|是|否|
| 二○ ○一年|大众、戴姆勒、雪佛兰|否|否|
我使用了以下查询

SELECT 

GROUP_CONCAT (distinct table1.year, table1.Cars ASC Separator ',') as Car Model

FROM TABLE1
r1zk6ea1

r1zk6ea11#

数据类型

CREATE TABLE mytable(
   year INTEGER  NOT NULL 
  ,Cars VARCHAR(50) NOT NULL
);
INSERT INTO mytable
(year,Cars) VALUES 
(2000,'BMW'),
(2000,'Maruti Suzuki'),
(2000,'TOYOTA'),
(2001,'Volkswagen'),
(2001,'Daimler'),
(2001,'Chevrolet');

使用IFGROUP_CONCAT

select year,
GROUP_CONCAT(Cars) as Cars,
IF(GROUP_CONCAT(Cars) LIKE '%TOYOTA%','YES','NO')  TOYOTA,
IF(GROUP_CONCAT(Cars) LIKE '%FORD%','YES','NO')  FORD
  from mytable
group by year

dbfiddle

fdx2calv

fdx2calv2#

这是一种方法。

SELECT
    tmp.*,
    IF(
        LOCATE('TOYOTA',tmp.car_model,1),
        'YES',
        'NO'
    ) AS 'TOYOTA',
    IF(
        LOCATE('Ford',tmp.car_model,1),
        'YES',
        'NO'
    ) AS 'Ford'
FROM (
    SELECT
        year,
        GROUP_CONCAT(DISTINCT car ORDER BY car ASC) AS car_model
    FROM cars
    GROUP BY year
) tmp
ORDER BY year ASC

您在这里看到的是一个正在运行的子查询。
首先,FROM ( .... ) tmp中的部分创建一个包含两列yearcar_model的临时表,其中car_model列是一个具有唯一模型的连接字符串。
接下来,我们查询那个临时表,将它用作新查询的源,检查TOYOTAFord是否出现在它的任何行中。
但是,如果您需要检查每个车型,并且每个车型都有一个单独的IF列,那么最好使用PHP或其他任何与MySQL一起工作的服务器端语言动态创建查询。

lc8prwob

lc8prwob3#

只需将 group_concat 聚合与标准条件聚合相结合:

select Year, GROUP_CONCAT(distinct cars order by cars asc) CarModel,
    max(case when cars = 'TOYOTA' then 'Yes' else 'No' end) TOYOTA,
    max(case when cars = 'FORD' then 'Yes' else 'No' end) FORD
from t
group by year;

相关问题