首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用SQL将两个SELECT语句相除以获得百分比

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

Stack Overflow用户
提问于 2018-03-14 05:52:23
回答 6查看 4.6K关注 0票数 3

我在试着从投递表中计算王室邮件的百分比。

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

/

SELECT post_method
FROM delivery_tbl;

我收到一个错误,说

"SQL命令未正确结束“。

这方面的任何帮助都是很棒的!谢谢!

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-03-14 16:29:32

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

SELECT round (100 * (count(case when post_method = 'RM' then 1 end) / count(*)), 2) royal_mail_items_percentage
FROM   delivery_tbl;

我已经包含了round函数,因为它看起来您只想显示最多两位小数。

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

票数 4
EN

Stack Overflow用户

发布于 2018-03-14 06:06:36

 Select post_method, (Count(post_method)* 100 / (Select Count(*) From 
 delivery_tbl)) as percentage
 From delivery_tbl
 Where post_method = 'RM'
 Group By post_method
票数 4
EN

Stack Overflow用户

发布于 2018-03-14 16:40:18

您正在对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

请记住,当子查询之间执行这些类型的除法(或任何算术操作)时,每个子查询必须返回一行。如果没有,那么SQL引擎将不知道使用哪一行,并抛出一个错误。

-- 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49266431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档