鱼C论坛

 找回密码
 立即注册
查看: 171|回复: 5

[已解决]在数据表为空的时候输出特定值

[复制链接]
发表于 2024-1-26 23:26:21 | 显示全部楼层 |阅读模式
2鱼币
现有一串代码如下:
  1. select case when nums is null then 0 else nums end nums from
  2. (select @num:=@num+1 nums from Transactions,(select @num:=-1) t1) t2
  3. where nums<=
  4.      (select ifnull(max(transactions_count),0) num from
  5.          (select count(amount) transactions_count from Transactions
  6.          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 代码:

  1. select case when nums is null then 0 else nums end as nums from (
  2.   select @num:=@num+1 as nums from Transactions, (select @num:=-1) t1
  3.   where @num <= (select coalesce(max(transactions_count), 0) as num from (
  4.       select count(amount) as transactions_count from Transactions
  5.       group by user_id, transaction_date) t3)
  6.   union all
  7.   select 0
  8. ) t2
  9. group by nums;
复制代码


最佳答案

查看完整内容

需要确保当 Transactions 表为空时,仍然能够生成一个包含 0 的结果集。 为此,我们可以通过外部查询来确保至少有一个值(即 0)被包含在最终的结果集中。 改进后的 SQL 代码:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-26 23:26:22 | 显示全部楼层    本楼为最佳答案   
需要确保当 Transactions 表为空时,仍然能够生成一个包含 0 的结果集。

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

改进后的 SQL 代码:

  1. select case when nums is null then 0 else nums end as nums from (
  2.   select @num:=@num+1 as nums from Transactions, (select @num:=-1) t1
  3.   where @num <= (select coalesce(max(transactions_count), 0) as num from (
  4.       select count(amount) as transactions_count from Transactions
  5.       group by user_id, transaction_date) t3)
  6.   union all
  7.   select 0
  8. ) t2
  9. group by nums;
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

select case when n ...

按照这个操作了但是还没有解决问题啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-27 10:50:14 | 显示全部楼层
zzong2019 发表于 2024-01-27 10:49
按照这个操作了但是还没有解决问题啊


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

  1. SELECT IFNULL(nums, '特定值') AS nums FROM 表名;
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-2-23 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表