Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL返回类别的名称、计数1、百分比1、计数2、百分比2_Sql_Oracle - Fatal编程技术网

Oracle SQL返回类别的名称、计数1、百分比1、计数2、百分比2

Oracle SQL返回类别的名称、计数1、百分比1、计数2、百分比2,sql,oracle,Sql,Oracle,我想不出如何添加纯文本。这个编辑器的帮助显示了代码和每个格式化的文本,我无法得到任何正确排列的内容,所以我尽可能地输入了信息 Given Tables: PRODUCT PRODUCT_NAME PROD_ID PROD_IND PROD_NAM_ID PROD_NAME 1 G 1 apples 2 B 2 oranges 3 B

我想不出如何添加纯文本。这个编辑器的帮助显示了代码和每个格式化的文本,我无法得到任何正确排列的内容,所以我尽可能地输入了信息

Given Tables:
PRODUCT                 PRODUCT_NAME
PROD_ID PROD_IND    PROD_NAM_ID PROD_NAME
1           G           1       apples
2           B           2       oranges
3           B           3       bananas
4           G           4       pears
5           B           5       plums
1           B       
2           G       
3           B       
4           B       
5           G       


I need an Oracle SQL query that will return a row for each grouped
PRODUCT_NAME.PROD_NAME:

Product #Bad Percentage #Good Percentage

apples  1   50           1    50

oranges 1   50           1    50

bananas 2   100          0    0

pears   1   50           1    50

plums   1   50           1    50


Where PRODUCT.PROD_IND = B means Bad and PRODUCT.PROD_IND = G means Good And
Percentage is percentage of total of a PRODUCT_NAME.PROD_NAME

试试这种方法,看看是否有效

SELECT x.name,
    x.GoodCount,
    x.GoodCount * 100 /(x.GoodCount + x.BadCount) [GoodPercent],
    x.BadCount,
    x.BadCount * 100 /(x.GoodCount + x.BadCount) [BadPercent]
FROM (
    SELECT pn.PROD_NAME as [name],
        COUNT(CASE WHEN p.PROD_IND = 'G' THEN 1 END) [GoodCount],
        COUNT(CASE WHEN p.PROD_IND = 'B' THEN 1 END) [BadCount]
    FROM PRODUCT as p
    JOIN PRODUCT_NAME as pn ON p.PROD_ID = pn.PROD_NAM_ID
    GROUP BY pn.PROD_NAME 
) as x

以下是问题的解决方案:


当然还有更优雅的方式来实现它。对吧?

你太好了,我所能提供的只是他需要的函数,而不是完整的查询,但是,只接受冗长的(!)完整答案!硬道理@OracleUser我明白,我只是不喜欢鼓励懒惰。我同意,我手头的时间太多了。需要找一个新的爱好。
with counter as (select prod_id, count(*) co from product group by prod_id),
   good_counter as (select prod_id, count(*) co from product where prod_ind='G' group by prod_id),
   bad_counter as (select prod_id, count(*) co from product where prod_ind='B' group by prod_id)
select 
product_name.prod_name, 
coalesce(bad_counter.co,0) "#bad",
coalesce(bad_counter.co,0) / counter.co * 100 bad_percentage, 
coalesce(good_counter.co,0) "#good", 
coalesce(good_counter.co,0) / counter.co * 100 good_percentage
from product_name
  inner join counter on product_name.prod_nam_id=counter.prod_id 
  left join good_counter on counter.prod_id=good_counter.prod_id
  left join bad_counter on counter.prod_id=bad_counter.prod_id