Mysql 是否可以将<;如果>;选择查询中的条件

Mysql 是否可以将<;如果>;选择查询中的条件,mysql,Mysql,我有一个名为categories的表,如上所示 对于某些T2值,T3可以为空,也可以有值。 我得到一个如下所示的查询 mysql> select * from categories ; +-------------+--------------------+-----------------+--------------------- | category_id | T1 | T2 | T3 +-------------+-----

我有一个名为categories的表,如上所示

对于某些T2值,T3可以为空,也可以有值。

我得到一个如下所示的查询

mysql> select * from categories ;
+-------------+--------------------+-----------------+---------------------
| category_id | T1                 | T2              | T3
+-------------+--------------------+-----------------+---------------------
|           2 | Popcorn            | Bucket          | NULL
|           3 | Popcorn            | Jumbo           | NULL
|           3 | Popcorn            | Jumbo           | NULL
            6 | Popcorn            | Combo Relish    | NULL                |
            7 | Soft Drinks        | Fountain        | Apple               |
            7 | Soft Drinks        | Fountain        | Apple               |
            8 | Soft Drinks        | Fountain        | Orange              |
            8 | Soft Drinks        | Bottled         | Orange              |
有了这个,结果看起来像这样

select t1, t2, 
    group_concat(concat(t3,'(',category_id,')')) consildated_Data 
from categories
group by 1,2;
我的问题是,如果T3为
null
,是否可以将值打印为空,并带有相应的
类别id
编号

所以水桶看起来像这样

Popcorn            | Bucket          | NULL
Popcorn            | Combo Relish    | NULL
Popcorn            | Jumbo           | NULL
Soft Drinks        | Fountain        | Apple(7),Apple(7),Orange(8)
Soft Drinks        | Bottled         | Orange(8)

是否有可能在上述查询下设置if条件???

是的,firebird上有案例


在不进行测试的情况下,您可以使用这样的:

Popcorn            | Bucket          | empty(2)
Popcorn            | Jumbo           | empty(3),empty(3)
在mysql中使用ifnull(x,[defalt_value])

SELECT
    t1,
    t2,
    IF(
        t3 IS NULL,                                  -- condition
        CONCAT('empty(', category_id, ')'),          -- true reaction
        GROUP_CONCAT(CONCAT(t3,'(',category_id,')')) -- false reaction
    ) AS consildated_Data
FROM categories
GROUP BY 1, 2;
或者您也可以使用
案例陈述
,但使用更丑陋的方法:

select t1, t2, 
    group_concat(concat(ifnull(t3, ''),'(',category_id,')')) consildated_Data 
from categories
group by 1,2;

@VigneshKumar你错了:@scrowler很抱歉这么说..我现在才知道+1@fish_ball那些空引号里面应该有“empty”吗?@scrowler你说的那些空引号是什么意思?
ifnull(t3',)
->
ifnull(t3',empty')
:为了满足OP的要求,用
empty(n)
代替
Apple(n)
例如,为什么字段
t3
不按分组,但可以在分组函数之外使用?@fish\u ball MySQL将允许“中断”使用未分组的字段,但如果
爆米花|巨型| null
行中的一行更改为
爆米花|巨型|橙色
,此查询将不会给出正确的结果。
select t1, t2, 
    group_concat(concat(case t3 when null then '' else t3 end)),'(',category_id,')')) consildated_Data 
from categories
group by 1,2;