【问题标题】:How to group by with 2 different field for the below criteria如何根据以下标准使用 2 个不同的字段进行分组
【发布时间】:2017-10-09 16:53:59
【问题描述】:
Name   date       sellingAmt
Raju 08-02-2017   2000
Ravi 09-02-2017   5000
Ravi 09-02-2017   2000
Raju 09-02-2107   1000

预期结果

Name   date       sellingAmt
Raju 08-02-2017   2000
Ravi 09-02-2017   7000
Raju 09-02-2107   1000

让我知道如何在 mysql 选择查询中按此分组

【问题讨论】:

  • SELECT Name, 'Date', Sum(SellingAmt) sellingAmt FROM tbl GROUP BY Name, 'Date' ORDER BY 'date', sellingAmt 用反引号代替撇号。
  • 如果您按sellingAmt 分组,您如何确定使用哪个名称?您的逻辑不清楚:您能告诉我们,如果有多个相同金额的条目,我们应该如何选择名称和日期?
  • 我刚刚注意到 Name 也是一个保留字。 dev.mysql.com/doc/refman/5.5/en/keywords.html 也许我们需要在反引号中转义名称和日期;虽然我无法在 rextester.com 上重现此问题。

标签: mysql group-by


【解决方案1】:

似乎是一个非常基本的问题。你在哪个部分苦苦挣扎?

始终发布您尝试过的内容,以便我们了解您的思路并尝试从根本上纠正问题,而不是为您提供成熟的解决方案!

  1. 日期(我只看到名称也是如此)是关键字/保留字,因此出于习惯我使用 ` 来转义它们。
  2. 我使用 sellAmt Desc 作为订单,因为您似乎想要在同一日期内购买;虽然你可以很容易地想要名称 desc。
  3. group by name, date 达到预期的效果。虽然 mySQL 扩展了 group by,因此您可以对少于 select 中的值进行分组,但我发现此功能被错误地使用的次数多于正确使用的次数。因此,我倾向于谨慎行事,并始终按不属于聚合的所有字段进行分组;这是其他 RDBMS 系统对您的要求。在您的情况下,日期和姓名是正确汇总 salesAmt 并达到预期结果的唯一组合。

.

SELECT `Name`, `Date`, Sum(SellingAmt) sellingAmt 
FROM {tblName}
GROUP BY `Name`, `Date` 
ORDER BY `date`, sellingAmt Desc

{tblname} 替换为您的表名。

【讨论】:

  • 如果我们按日期分组。拉维 09-02-2017 7000 拉朱 09-02-2107 1000。此记录分组并合并为单个记录。请检查我的预期结果。
  • 所以您需要通过...将名称添加到您的组中。为什么上述方法不起作用?我添加了元素 3,但保持 SQL 不变。它似乎符合您的预期结果。这是RexTester Demo
  • SELECT Name, Date, Sum(SellingAmt) sellAmt FROM {tblName} GROUP BY Name, Date ORDER BY date, sellAmt Desc 上述问题的查询结果返回2条记录。但我的预期结果应该返回 3 条记录。请为上述示例创建表并检查它。
  • 我无法重现这种情况; rextester.com/CGTSA55427您确定您的样本数据正确吗?查看链接:我添加了您的查询替换生成的表,它返回 3 条记录。我想也许因为日期/名称是保留字,所以你需要它们周围的反引号;否则也许它只是在当前日期返回和分组....但我尝试了两种方式,它似乎在 rextester 上工作。所以这留下了两件事之一:1)您的示例数据不匹配 2)您的 mySQL 版本具有不同的配置,导致不同的结果。
猜你喜欢
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多