数据中没有找到记录则返回结果

问题描述 投票:0回答:1

目标是显示不同桶(0-100、101-400、401-800、801-1000、1001及以上)中的订单数量。然而,没有1001及以上的订单,但我们仍然需要显示该桶有0个订单。我不知道如何显示该行。我正在使用 Orcale SQL 生成器。

下面是我现在的编码。我能够显示其中包含订单的存储桶,但无法显示显示 1001 及以上 0 个订单的行。请帮忙。

SELECT "Bucket", COUNT(*) AS "Order Count"
FROM
(
SELECT CASE
    WHEN O.QuantityShares <= 100 THEN '1. 0-100'
    WHEN O.QuantityShares <= 400 THEN '2. 101-400'
    WHEN O.QuantityShares <= 800 THEN '3. 401-800'
    WHEN O.QuantityShares <= 1000 THEN '4. 801-1000'
    ELSE '5. 1001 and Above'
  END AS "Bucket"
FROM OrderTransactions O
)
GROUP BY "Bucket"
ORDER BY "Bucket" ASC
/
oracle
1个回答
0
投票

您可以定义存储桶并使用数据的左外连接来计算匹配的数量;因为它是外部联接,所以它仍然会显示没有匹配项的存储桶的数据。

例如:

WITH Buckets (Bucket) AS
(
  SELECT '1. 0-100' FROM DUAL UNION ALL
  SELECT '2. 101-400' FROM DUAL UNION ALL
  SELECT '3. 401-800' FROM DUAL UNION ALL
  SELECT '4. 801-1000' FROM DUAL UNION ALL
  SELECT '5. 1001 and Above' FROM DUAL
)
SELECT B.Bucket AS "Bucket", COUNT(O.Bucket) AS "Order Count"
FROM Buckets B
LEFT JOIN (
  SELECT CASE
      WHEN O.QuantityShares <= 100 THEN '1. 0-100'
      WHEN O.QuantityShares <= 400 THEN '2. 101-400'
      WHEN O.QuantityShares <= 800 THEN '3. 401-800'
      WHEN O.QuantityShares <= 1000 THEN '4. 801-1000'
      ELSE '5. 1001 and Above'
    END AS Bucket
  FROM OrderTransactions O
) O
ON O.Bucket = B.Bucket
GROUP BY B.Bucket
ORDER BY B.Bucket ASC
/

或者为了避免重复标签,请使用合成的“键”作为连接:

WITH Buckets (Bucket, Label) AS
(
  SELECT 1, '1. 0-100' FROM DUAL UNION ALL
  SELECT 2, '2. 101-400' FROM DUAL UNION ALL
  SELECT 3, '3. 401-800' FROM DUAL UNION ALL
  SELECT 4, '4. 801-1000' FROM DUAL UNION ALL
  SELECT 5, '5. 1001 and Above' FROM DUAL
)
SELECT B.Label AS "Bucket", COUNT(O.Bucket) AS "Order Count"
FROM Buckets B
LEFT JOIN (
  SELECT CASE
      WHEN O.QuantityShares <= 100 THEN 1
      WHEN O.QuantityShares <= 400 THEN 2
      WHEN O.QuantityShares <= 800 THEN 3
      WHEN O.QuantityShares <= 1000 THEN 4
      ELSE 5
    END AS Bucket
  FROM OrderTransactions O
) O
ON O.Bucket = B.Bucket
GROUP BY B.Bucket, B.Label
ORDER BY B.Bucket ASC
/

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.