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