【问题标题】:Distinct values in columns X per Distinct values in column YX 列中的不同值每个 Y 列中的不同值
【发布时间】:2014-05-25 23:51:44
【问题描述】:

我正在使用以下查询来整理表中的数据,但计算不正确:

SELECT rowid, customer, category, SUM(DISTINCT return) as returntotal, SUM(DISTINCT release) as releasetotal FROM orders GROUP BY customer

这是我当前的表格:

这就是我需要的查询结果:

我需要 DISTINCT 'category' 中'return' 中的 DISTINCT 值的总和;按 DISTINCT 'category' 和所有 GROUPED BY 客户在 'release' 中的 DISTINCT 值的总和。我当前的查询正在跳过具有相同值的 DISTINCT 类别。例如:在顶部图像中的 rowid 17-19 中,我的查询结果为 Scott 的值“465”,其中我需要的值是每个 DISTINCT 类别的 DISTINCT 值或家居用品为 465,草坪为 465。

我的每一行的输出应该如下:

customer (no duplicates)     totalreturn     totalrelease

以下是每行所需输出的示例:

Scott       $0      $930
Michelle    $123    $250
Brad        $2070   $0

问题:

  1. 我的陈述应该是什么样子才能产生我需要的结果?
  2. 如果我已经在使用 DISTINCT,是否过度使用 GROUPED BY??

谢谢!

【问题讨论】:

  • 考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集

标签: mysql sql


【解决方案1】:

要获得最终结果,请使用子查询:

select customer, sum(return) as return, sum(category) as category
from (select distinct customer, return, release, category
      from orders
     ) o
group by customer;

既然我已经说过了,我认为您的基础数据有问题。每当您考虑sum(distinct)count(distinct) 时,都会遇到数据问题。在这种情况下,我假设数据是有意按orders 表中的类别去规范化的。您确实应该从不同的表中获取每个类别的通用值。或者,您在 orders 中有不应该存在的重复项。

【讨论】:

  • 感谢您的 cmets,戈登。我想我会重新检查我的导入(我的数据来自 .csv 文件),看看我是否可以在 INSERT 上标准化分组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多