mysql - SQL调优: division between the sum of two columns

标签 mysql sql sql-server database

我想做这样的事情:

SELECT SUM(COL1) / SUM(COL2) FROM table_name

我的问题:

  1. 错误处理。如果 SUM(COL2) 为 0,大多数情况下会返回什么 数据库实现?在这种情况下如何返回 0?
  2. 性能调整。是否通常保证这 2 个 SUM() 将在单个循环中计算,而不是遍历所有 记录来计算 SUM(COL1),然后再次遍历所有内容以 计算 SUM(COL2)?如果不能保证,如何改进 性能使得这种划分可以由数据库引擎在单个循环中完成?

您可以根据您熟悉的数据库引擎来回答这个问题。

<小时/>

(对于问题1我已经得到了很多很好的答案,但是似乎没有人知道问题2的答案。)

最佳答案

SQL:

DECLARE @Table TABLE (column1 INT, column2 INT)

INSERT INTO @Table 
VALUES
(0, 0)

SELECT CASE WHEN SUM(Column2) > 0 
    THEN
        SUM(column1) / SUM(column2) 
    ELSE 0
    END AS [Sum Division]
FROM @Table

如果column2的总和不大于0(包括空值),则给出0值。

编辑

这假设您在第 2 列中不会有负值。如果可能存在负值,您需要使用:

SELECT CASE WHEN SUM(Column2) IS NOT NULL AND SUM(Column2) <> 0 
    THEN
        SUM(column1) / SUM(column2) 
    ELSE 0
    END AS [Sum Division]
FROM @Table

这将对所有非 0 数字进行计算。但是,对于 0NULL 值,它只会返回 0。

关于mysql - SQL调优: division between the sum of two columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34517576/

相关文章:

mysql - 地理冗余和 MySQL 复制

mysql - 问 : Efficiently get the oldest value, 大表中每组的最新值和计数?

php - 使用 OR 子句的 SQL 查询

sql - 如何修复 SQL Developer Data Modeller 中的 "ERROR: FK name length exceeds maximum allowed length(30)"

sql - 将日期范围拆分为月份

sql-server - CTE 返回层次结构中的所有项目

php - 我希望用户仅在登录后更新帐户信息......但我不知道该怎么做

php - 使用中间表从另一个表获取信息

c# - 将图像从数据库显示到picturebox winforms c#

c# - 从另一个表插入一个表中的值