mysql - 如何使用两列得到第三列的结果

标签 mysql sql

我有这个 SQL 查询

SELECT
  SERVERPROPERTY('MachineName') AS FoodServer,
  SUM(Extended * Multiplier) AS GrossSale,
  (SELECT
    COUNT(*)
  FROM FinishedTransaction)
  AS counts
FROM finishedsales fs
LEFT JOIN FinishedTransaction ft
  ON fs.TransactionNo = ft.TransactionNo

现在,我想获取 GrossSale 列和计数列的商并将其显示到第三列。我在下面尝试了这个查询,但它不起作用。

SELECT
  SERVERPROPERTY('MachineName') AS FoodServer,
  SUM(Extended * Multiplier) AS GrossSale,
  (SELECT
    COUNT(*)
  FROM FinishedTransaction)
  AS counts,
  (GrossSale / counts) AS result
FROM finishedsales fs
LEFT JOIN FinishedTransaction ft
  ON fs.TransactionNo = ft.TransactionNo

这个替代解决方案正在工作..

SELECT
  SERVERPROPERTY('MachineName') AS FoodServer,
  SUM(Extended * Multiplier) AS GrossSale,
  (SELECT
    COUNT(*)
  FROM FinishedTransaction)
  AS counts,
  SUM(Extended * Multiplier) / (SELECT
    COUNT(*)
  FROM FinishedTransaction)
  AS result
FROM finishedsales fs
LEFT JOIN FinishedTransaction ft
  ON fs.TransactionNo = ft.TransactionNo

但我不想要那个解决方案,因为它有点冗长,而且性能不佳。我想知道该问题的最佳解决方案

最佳答案

我没有发现您的解决方案有任何问题,您可能更喜欢这个,但我怀疑您会获得更好的性能。

Select Foodserver, GrossSale, Counts, (GrossSale / counts) as result    
    FROM
    (
        SELECT SERVERPROPERTY ('MachineName') as FoodServer,
        SUM(Extended * Multiplier) as GrossSale, 
        (SELECT COUNT(*) FROM FinishedTransaction) as counts

        FROM finishedsales fs LEFT JOIN FinishedTransaction ft
        ON fs.TransactionNo = ft.TransactionNo
    ) as salesData

注意。你也应该在这里添加除以零检查..我认为where GrossSale <>0 AND Counts <>0应该这样做。

关于mysql - 如何使用两列得到第三列的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433431/

相关文章:

java - 如何遍历数据库中employeeID列中的所有行并一次检索一个小时工资率?

MySQL嵌套连接

mysql - 学说多次刷新提交一次

mysql - SELECT 来匹配特殊字符和大小写

MySQL - 不一样

php - Laravel - 在 Controller 中存储和设置数组

mysql - 查询以检查列之间的关系?

sql - 如何减去两个包含 ISO 格式的 dateTime 的 dateTime 字段并得到以小时为单位的结果?

mysql - Informix 相当于 MySQL 'Replace' 命令

mysql - mysql比较varchar到datetime