软件测试面试题——数据库知识

 1、要查询每个商品的入库数量,可以使用以下SQL语句:

SELECT 商品编号, SUM(入库数量) AS 入库数量
FROM Stock
GROUP BY 商品编号;

这将从Stock表中选择每个商品的入库数量,并使用SUM函数对入库数量进行求和。结果将按照商品编号进行分组,并显示每个商品的入库数量。

2、要查询每个商品的出库数量,可以使用以下SQL语句:

SELECT 商品编号, SUM(出库数量) AS 出库数量
FROM OutStock
GROUP BY 商品编号;

这将从OutStock表中选择每个商品的出库数量,并使用SUM函数对出库数量进行求和。结果将按照商品编号进行分组,并显示每个商品的出库数量。

3、要查询每个商品的剩余数量,可以使用以下SQL语句:

SELECT 商品编号, SUM(出库数量) AS 出库数量
FROM OutStock
GROUP BY 商品编号;

这将从OutStock表中选择每个商品的出库数量,并使用SUM函数对出库数量进行求和。结果将按照商品编号进行分组,并显示每个商品的出库数量。

要查询每个商品的剩余数量,可以使用以下SQL语句:

SELECT s.商品编号, (s.入库数量 - COALESCE(o.出库数量, 0)) AS 剩余数量
FROM Stock s
LEFT JOIN (
    SELECT 商品编号, SUM(出库数量) AS 出库数量
    FROM OutStock
    GROUP BY 商品编号
) o ON s.商品编号 = o.商品编号;

 详细解释:

当查询每个商品的剩余数量时,我们需要考虑该商品的入库数量和出库数量,然后计算它们的差值,即剩余数量。

首先,我们使用以下SQL语句查询每个商品的入库数量:

SELECT 商品编号, SUM(入库数量) AS 入库数量
FROM Stock
GROUP BY 商品编号;

这将从Stock表中选择每个商品的入库数量,并使用SUM函数对入库数量进行求和。结果将按照商品编号进行分组,并显示每个商品的入库数量。

然后,我们使用以下SQL语句查询每个商品的出库数量:

SELECT 商品编号, SUM(出库数量) AS 出库数量
FROM OutStock
GROUP BY 商品编号;

这将从OutStock表中选择每个商品的出库数量,并使用SUM函数对出库数量进行求和。结果将按照商品编号进行分组,并显示每个商品的出库数量。

接下来,我们将以上两个查询结果进行连接,并计算每个商品的剩余数量。为了处理可能的空值情况,我们使用COALESCE函数将空值替换为零。下面是完整的SQL语句:

SELECT s.商品编号, (s.入库数量 - COALESCE(o.出库数量, 0)) AS 剩余数量
FROM (
    SELECT 商品编号, SUM(入库数量) AS 入库数量
    FROM Stock
    GROUP BY 商品编号
) s
LEFT JOIN (
    SELECT 商品编号, SUM(出库数量) AS 出库数量
    FROM OutStock
    GROUP BY 商品编号
) o ON s.商品编号 = o.商品编号;

 这将返回每个商品的商品编号和剩余数量,其中剩余数量是通过将入库数量减去出库数量计算得到的。如果某个商品在出库表中没有对应的记录,则出库数量将被视为零。

SELECT billtype, SUM(qty) AS total_quantity
FROM billorder
WHERE create_time >= CURRENT_DATE - INTERVAL '1 day'
  AND create_time < CURRENT_DATE
GROUP BY billtype;

或者,如果qty字段是可空的,你可以使用COALESCE(SUM(qty), 0)来处理可能的空值情况,将空值视为零。下面是修改后的SQL语句:

SELECT billtype, COALESCE(SUM(qty), 0) AS total_quantity
FROM billorder
WHERE create_time >= CURRENT_DATE - INTERVAL '1 day'
  AND create_time < CURRENT_DATE
GROUP BY billtype;

 这样,查询结果将包含各种单据类型及其对应的下单数量总和。

在不同数据库系统中,SQL语句可能会有所不同。下面是一种通用的SQL语句,可以在大多数数据库系统中使用,来实现获取最后1天各种单据类型的下单量:

SELECT billtype, COUNT(*) AS order_count
FROM billorder
WHERE create_time >= CURRENT_DATE - INTERVAL '1 day'
  AND create_time < CURRENT_DATE
GROUP BY billtype;

请注意,上述SQL语句假设create_time字段存储的是日期和时间信息。如果create_time字段只存储日期信息,而不包含时间,请使用下面的SQL语句:

SELECT billtype, COUNT(*) AS order_count
FROM billorder
WHERE create_time >= CURRENT_DATE - INTERVAL '1 day'
  AND create_time < CURRENT_DATE + INTERVAL '1 day'
GROUP BY billtype;

这些SQL语句将从billorder表中选择最后一天(即前一天)的订单,并按照单据类型进行分组计数。结果将包含各种单据类型及其对应的下单量。注意,可能有一些单据类型在最后一天没有订单,因此结果集中可能存在某些类型的下单量为零。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛_Chenpangzi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值