我在试着从投递表中计算王室邮件的百分比。
(SELECT post_method
FROM delivery_tbl
WHERE post_method = 'RM')
/
SELECT post_method
FROM delivery_tbl;
我收到一个错误,说
"SQL命令未正确结束“。
这方面的任何帮助都是很棒的!谢谢!
发布于 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
函数,因为它看起来您只想显示最多两位小数。
使用条件聚合进行查询意味着您只需查询表一次,因此它应该比需要多次命中表的其他答案具有更高的性能。
发布于 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
发布于 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
https://stackoverflow.com/questions/49266431
复制相似问题