Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
如何使用SQL将两个SELECT语句分开以获得百分比_Sql_Oracle - Fatal编程技术网

如何使用SQL将两个SELECT语句分开以获得百分比

如何使用SQL将两个SELECT语句分开以获得百分比,sql,oracle,Sql,Oracle,我正试图从送货表中计算皇家邮政发送的邮件的百分比 (SELECT post_method FROM delivery_tbl WHERE post_method = 'RM') / SELECT post_method FROM delivery_tbl; 我听到一个错误说 “SQL命令未正确结束” 这方面的任何帮助都会很好!谢谢 在开头添加一个选择语句: SELECT ((SELECT post_method FROM delivery_tbl Where post_method =

我正试图从送货表中计算皇家邮政发送的邮件的百分比

(SELECT post_method
FROM delivery_tbl
WHERE post_method = 'RM') 

/

SELECT post_method
FROM delivery_tbl;
我听到一个错误说

“SQL命令未正确结束”


这方面的任何帮助都会很好!谢谢

在开头添加一个选择语句:

SELECT ((SELECT post_method FROM delivery_tbl Where post_method = 'RM') / (SELECT post_method FROM delivery_tbl));
更新查询以获取计数

 SELECT ((SELECT COUNT(post_method) FROM delivery_tbl Where post_method = 'RM')/ (SELECT COUNT(post_method) FROM delivery_tbl))*100 as royalperc
我认为您应该使用第二个查询

使用sql:

select (
(select sum(post_method) from delivery_tbl where post_method = 'RM') /
(select sum(post_method) from delivery_tbl)) * 100 as "royalperc" from dual ;

您可以使用条件聚合来完成此操作,如下所示:

SELECT round (100 * (count(case when post_method = 'RM' then 1 end) / count(*)), 2) royal_mail_items_percentage
FROM   delivery_tbl;
我加入了
舍入
函数,因为它看起来最多只需要显示两位小数


使用条件聚合执行查询意味着您只需查询表一次,因此它的性能应该比其他答案更高,因为其他答案需要多次访问表。

您正在执行2个查询的除法,但要正确显示结果,您需要添加除法的
SELECT
语句

这是错误的:

-- Result: SQL command not properly ended
(SELECT 100 FROM DUAL) / (SELECT 50 FROM DUAL)
这没关系:

-- Result: 2
SELECT
    (SELECT 100 FROM DUAL) / (SELECT 50 FROM DUAL)
FROM 
    DUAL
您还应尝试添加列名,以便更清晰:

-- ResultOfDivision: 2
SELECT
    (SELECT 100 FROM DUAL) / (SELECT 50 FROM DUAL) ResultOfDivision 
FROM
    DUAL
请记住,在子查询之间执行这些类型的除法(或任何算术运算)时,每个子查询必须返回1行。如果没有,那么SQL引擎将不知道使用哪一行并抛出错误

-- Result: single-row subquery returns more than one row.
SELECT
    (SELECT 100 FROM DUAL) / (SELECT SomeColumn FROM YourTableWithManyRows) ResultOfDivision 
FROM 
    DUAL
对于最后一个示例,正确的表达式如下(对于每一行)


我得到的答案是4.8E+01,我如何将其显示为47.76?它将是48,计数不能是非整数。您使用的是什么SQL?@Ibo一个计数除以另一个计数很可能是非整数!(例如1/3)@Boneist你说得对!我把它和我在这里回答的另一个问题完全混淆了,这是一个计数的和,所以它不可能是一个非整数:)但是这些是结果数据集,而不是计数,您需要更改查询以获得可能的重复计数
-- ResultOfDivision: 2
SELECT
    (SELECT 100 FROM DUAL) / (SELECT 50 FROM DUAL) ResultOfDivision 
FROM
    DUAL
-- Result: single-row subquery returns more than one row.
SELECT
    (SELECT 100 FROM DUAL) / (SELECT SomeColumn FROM YourTableWithManyRows) ResultOfDivision 
FROM 
    DUAL
SELECT
    (100 / SomeColumn) ResultOfDivision 
FROM
    YourTable
WHERE
    SomeColumn <> 0 -- Prevent division by 0!!
-- Make sure SELECT COUNT(1) FROM delivery_tbl isnt 0!

SELECT
    post_method,
    COUNT(post_method) * 100 / (SELECT COUNT(1) FROM delivery_tbl) 100perc, -- 100 based percentage
    COUNT(post_method) / (SELECT COUNT(1) FROM delivery_tbl) 1perc -- 1 based percentage
FROM
    delivery_tbl
GROUP BY
    post_method