我正在使用Mysql查询数据库。我有一个水果表,并且编写了查询以获取特定月份出售水果的AMT。我的查询如下

 select fruit_code, fruit_name, yyyymm, amt from fruits;


并返回以下类型的结果集

     fruit_code |  fruit_name | yyyymm | amt
    -----------------------------------------
     A          |  Apple      | 201401 | 100
     A          |  Apple      | 201402 | 150
     A          |  Apple      | 201403 | 200
     A          |  Apple      | 201403 | 170


但我想要的是,如果yyyymm相同,则应添加amt值。所以我在下面的查询中尝试了这个

 select fruit_code, fruit_name, yyyymm, SUM(amt) from fruits group by yyyymm;


但这给了我

  fruit_code | fruit_name | yyyymm | amt
  ----------------------------------------
   A         |   Apple    | 201401 | 570


此处,amt列中的所有值均已添加,仅返回一行。

我需要的是一个类似下面的结果集

    fruit_code | fruit_name | yyyymm | amt
   ----------------------------------------
     A        |   Apple    |  201401 | 100
     A        |   Apple    |  201402 | 150
     A        |   Apple    |  201403 | 370


我不太清楚我要去哪里。请以正确的表达方式对我提出建议。

最佳答案

通过select fruit_code, fruit_name, yyyymm, SUM(amt) from fruits group by yyyymm;,您正在使用MySQL对SQL Standard的增强。

您正在按yyyymm分组,并且正在要求dbms给您:


yyyymm
无论哪种水果,该yyyymm的所有amt之和
记录与yyyymm匹配的fruit_code之一
记录与yyyymm匹配的fruit_names之一


您可能想要的是:

select fruit_code, fruit_name, yyyymm, SUM(amt)
from fruits
group by fruit_code, fruit_name, yyyymm;

关于mysql - 无法通过表达式获得正确的分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22832518/

10-12 14:17