Mysql SQL";分组方式;仅返回第一行-bis

Mysql SQL";分组方式;仅返回第一行-bis,mysql,sql,group-by,Mysql,Sql,Group By,我从中了解到:MySQL只返回为组找到的第一个值 为了简化,我有以下表格: Products ---------------- id | description ---------------- 1 | Product-1 2 | Product-2 3 | Product-3 Groups ------ id | description ---------------- 1 | Group-1 2 | Group-2 nxm_Products_Groups ---------

我从中了解到:MySQL只返回为组找到的第一个值

为了简化,我有以下表格:

Products
----------------
id | description
----------------
1  | Product-1
2  | Product-2
3  | Product-3


Groups
------
id | description
----------------
1  | Group-1
2  | Group-2


nxm_Products_Groups
---------------------
product_id | group_id | qty
---------------------
1          |   1      | 10
1          |   2      | 10
2          |   1      | 10
3          |   1      | 10
最后一个表是产品和组之间的多对多关联表

我想按产品分组,汇总它们的数量(
qty
),当所有汇总的产品都在一个组中时,我想选择组名,否则我想返回“?”

MySQL总是返回它找到的第一个组:

SELECT  
    G.id AS GROUP_ID,
    G.description,  
    P.id AS PRODUCT_ID,  
    P.description,  
    SUM(GP.qty) AS QTY 
 FROM  
    Groups G  
 JOIN nxm_Products_Groups GP ON (G.id = GP.group_id)  
 JOIN Products P ON (P.id = GP.product_id)  
 GROUP BY P.id  
 ORDER BY GP.group_id;
我得到:

GROUP_ID|description|PRODUCT_ID|description|QTY
1       |Group 1    |2         |Product-2  |10
1       |Group 1    |3         |Product-3  |10
1       |Group 1    |1         |Product-1  |20
编辑:也许我的问题不清楚。我想要的不是我得到的,而是:

GROUP_ID|description|PRODUCT_ID|description|QTY
1       |Group 1    |2         |Product-2  |10
1       |Group 1    |3         |Product-3  |10
???     |???        |1         |Product-1  |20

如何使用?

您不能使用
而不是
组ID
,因为它是一个INT字段。例如,您可以使用
0
。尝试使用
案例

SELECT  
    CASE WHEN COUNT(*)=1 THEN G.id ELSE 0 END AS GROUP_ID,
    CASE WHEN COUNT(*)=1 THEN G.description ELSE '\?\?' END AS GROUP_DESC,  
    P.id AS PRODUCT_ID,  
    P.description,  
    SUM(GP.qty) AS QTY 
 FROM  
    Groups G  
 JOIN nxm_Products_Groups GP ON (G.id = GP.group_id)  
 JOIN Products P ON (P.id = GP.product_id)  
 GROUP BY P.id  
 ORDER BY GROUP_ID;

没有真正意义吗?常规GROUP BY规则是:如果指定了GROUP BY子句,则SELECT列表中的每个列引用必须标识分组列或是集合函数的参数。第一句话不正确。MySQL被明确地记录为从不确定的行返回值,而不是从第一行返回值(dev.MySQL.com/doc/refman/5.6/en/group by handling.html)。@jarlh完全正确,事实并非如此!我的查询应该会给出一个错误…@GordonLinoff好的,谢谢,但这不是问题的重点。您是否仍希望在第一列中看到组id 1,但是您不想在第二列中看到组id 1的描述?是的,但在这种情况下,此字段
组id
将在结果集中自动转换为VARCHAR