zzong2019 发表于 2024-1-26 23:26:21

在数据表为空的时候输出特定值

现有一串代码如下:
select case when nums is null then 0 else nums end nums from
(select @num:=@num+1 nums from Transactions,(select @num:=-1) t1) t2
where nums<=
   (select ifnull(max(transactions_count),0) num from
         (select count(amount) transactions_count from Transactions
         group by user_id,transaction_date) t3)
该串代码希望实现的是统计Transactions表中在user_id和transaction_date分组下amount计数值中的最大值,之后生成一个从0到最大值的连续整数序列,如果Transactions表为空的时候,需要输出的是0,但实际这段代码输出的是一个空表。已经尝试加上ifnull判定条件输出0来改变这样的情况,但仍未解决,请指导一下应该如何改进?谢谢啦~

不二如是 发表于 2024-1-26 23:26:22

需要确保当 Transactions 表为空时,仍然能够生成一个包含 0 的结果集。

为此,我们可以通过外部查询来确保至少有一个值(即 0)被包含在最终的结果集中。

改进后的 SQL 代码:

select case when nums is null then 0 else nums end as nums from (
select @num:=@num+1 as nums from Transactions, (select @num:=-1) t1
where @num <= (select coalesce(max(transactions_count), 0) as num from (
      select count(amount) as transactions_count from Transactions
      group by user_id, transaction_date) t3)
union all
select 0
) t2
group by nums;


FishC 发表于 2024-1-26 23:26:52

你可以在外层select语句中添加一个条件,当nums为null时输出特定值。具体代码如下:

select case when nums is null then '特定值' else nums end as nums
from
(select @num:=@num+1 as nums
from Transactions,(select @num:=-1) t1) t2
where nums

其中,'特定值'代表你想要在nums为空时输出的值。你可以根据实际需求进行替换。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

zzong2019 发表于 2024-1-27 10:49:54

FishC 发表于 2024-1-26 23:26
你可以在外层select语句中添加一个条件,当nums为null时输出特定值。具体代码如下:

select case when n ...

按照这个操作了但是还没有解决问题啊

FishC 发表于 2024-1-27 10:50:14

zzong2019 发表于 2024-01-27 10:49
按照这个操作了但是还没有解决问题啊

抱歉,我理解错了你的问题。如果你想在表为空时输出特定值,你可以使用IFNULL函数来实现。IFNULL函数会检查一个字段是否为NULL,如果是则返回指定的值。下面是一个示例代码:

SELECT IFNULL(nums, '特定值') AS nums FROM 表名;

在这个代码中,nums代表你要检查的字段名,'特定值'代表你想要在字段为空时输出的特定值。你只需将上述代码中的"表名"替换为你需要查询的实际表名即可。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

tangsonghad 发表于 2024-1-29 00:57:43

SELECT
    IFNULL(nums, 0) AS nums
FROM
    (SELECT
      @num := @num + 1 AS nums
   FROM
      (SELECT
            @num := 0) init
      CROSS JOIN
            (SELECT
                1 AS dummy
             UNION ALL
             SELECT
                1
             FROM
                Transactions
             LIMIT
                (SELECT
                  MAX(transactions_count)
               FROM
                  (SELECT
                        COUNT(amount) AS transactions_count
                     FROM
                        Transactions
                     GROUP BY
                        user_id, transaction_date) t3) - 1) t1) t2
页: [1]
查看完整版本: 在数据表为空的时候输出特定值