oracle SELECT CASE WHEN THEN ELSE END语句出现问题

wztqucjr  于 2023-05-16  发布在  Oracle
关注(0)|答案(2)|浏览(219)

我需要一个查询的Oracle SQL,如果商的除法(计数(prod_low)/计数(prod_total))小于0.005显示此商;在另一种情况下,给出了该操作的被除数(prod_low)的一部分的特定情况。
如果在这两种情况下都显示列表prod_low,并且在每一行中显示上面提到的除法的百分比,那么这也是值得的。如果不行的话,就用一个短语来代替百分比:>= 0.5%'或'无警报:基于计算的商,每条线<0.5%。
感谢您的评分

SELECT CASE 
       WHEN (COUNT (prod_low) / COUNT (prod_total)) > 0.005 THEN (COUNT (prod_low) / COUNT (prod_total))
       ELSE prod_low
       END 
FROM(
SELECT DISTINCT p1.prods AS prod_total, prod_low
FROM products p1
LEFT JOIN(SELECT DISTINCT p2.prods AS prod_low, p2.id AS id2
FROM products p2
WHERE p2.price < 10)
ON p1.id = id2)
ctzwtxfj

ctzwtxfj1#

试试这个

WITH prod_counts AS (
  SELECT
    COUNT(*) AS prod_total,
    COUNT(CASE WHEN p.price < 10 THEN p.prods ELSE NULL END) AS prod_low
  FROM products p
)
SELECT
  prod_low,
  (prod_low / prod_total) * 100 AS percentage,
  CASE
    WHEN (prod_low / prod_total) < 0.005 THEN 'no alert: <0.5%'
    ELSE 'alert: >= 0.5%'
  END AS alert_status
FROM prod_counts;

此查询使用WITH子句计算prod_total和prod_low计数,然后计算每行的百分比和警报状态。
请注意,我假设prod_low和prod_total分别基于价格小于10的产品数量和产品总数。如果您想根据其他条件进行筛选,可以相应地修改COUNT(CASE...)行。

ttp71kqs

ttp71kqs2#

您还没有给出任何示例数据或预期输出,但是您可以使用条件聚合在没有任何自联接的情况下获得输出。如果你想的话

SELECT id,
       CASE
       WHEN COUNT(CASE WHEN price < 10 THEN prods END) / COUNT(prods) > 0.005
       THEN COUNT(CASE WHEN price < 10 THEN prods END) / COUNT(prods)
       ELSE MAX(CASE WHEN price < 10 THEN prods END)
       END
FROM   products
GROUP BY id

或:

SELECT CASE
       WHEN COUNT(CASE WHEN price < 10 THEN prods END) / COUNT(prods) > 0.005
       THEN COUNT(CASE WHEN price < 10 THEN prods END) / COUNT(prods)
       ELSE MAX(CASE WHEN price < 10 THEN prods END)
       END
FROM   products

相关问题