ZHZHK001 2024-11-26 14:55 采纳率: 85.7%
浏览 20

mysql 一个字段为空则使用另一个字段的值



```sql
SELECT TOP  10 g_sn , g_specs gspecs,
    SUM ( CAST ( o_num AS DECIMAL ) ) AS sumnum 
FROM
    lc_order_tem 
GROUP BY
    g_sn  ,g_specs
ORDER BY
    sumnum DESC
如何做到假如 g_specs 为空,用g_name的内容代替g_specs



```sql
SELECT
    dd.g_sn ,
    dd.sumnum ,
    ee.g_name ,
    COALESCE ( ee.g_specs, ee.g_name ) AS gspecs 
FROM
    ( SELECT TOP 10 g_sn, SUM ( CAST ( o_num AS DECIMAL ) ) AS sumnum FROM lc_order_tem GROUP BY g_sn ORDER BY sumnum DESC ) dd
    INNER JOIN lc_order_tem ee ON dd.g_sn = ee.g_sn

明明dd表只有10项,组合起来怎么变成不是10项?

  • 写回答

1条回答 默认 最新

  • 趣享先生 优质创作者: 编程框架技术领域 2024-11-26 14:57
    关注

    该回答参考ChatGPT,由吾为汝整理提供如若有用,还请题主采纳!

    在 MySQL 中,如果你想在查询中使用一个字段的值(如 g_specs),但当该字段为空时使用另一个字段的值(如 g_name),可以使用 COALESCE 函数或 IFNULL 函数。COALESCE 函数返回其参数中第一个非空值,而 IFNULL 函数则检查第一个参数是否为 NULL,如果是,则返回第二个参数。

    以下是修改后的 SQL 查询,使用 COALESCE 函数来实现你的需求:

    SELECT 
        g_sn, 
        COALESCE(g_specs, g_name) AS gspecs,  -- 如果 g_specs 为空,则使用 g_name
        SUM(CAST(o_num AS DECIMAL)) AS sumnum 
    FROM
        lc_order_tem 
    GROUP BY
        g_sn, 
        gspecs  -- 使用别名 gspecs 进行分组
    ORDER BY
        sumnum DESC
    LIMIT 10;  -- MySQL 中使用 LIMIT 而不是 TOP
    

    解释

    1. **COALESCE(g_specs, g_name)**:如果 g_specs 为空(NULL),则使用 g_name 的值。
    2. AS gspecs:给计算出的字段起一个别名 gspecs,以便在 GROUP BYSELECT 中使用。
    3. LIMIT 10:在 MySQL 中使用 LIMIT 来限制结果集的行数,而不是 TOP

    注意

    • 确保 g_name 字段在表 lc_order_tem 中存在,并且在使用 COALESCE 时不会导致其他问题。
    • 如果 g_specsg_name 都可能为空,COALESCE 将返回 NULL,在这种情况下,你可能需要进一步处理。

    (如若有用,还请题主采纳!)

    评论

报告相同问题?

问题事件

  • 修改了问题 11月26日
  • 创建了问题 11月26日