gpt4 book ai didi

mysql - SQL "group by"仅返回第一行 - 之二

转载 作者:行者123 更新时间:2023-11-28 23:50:28 24 4
gpt4 key购买 nike

我从这里了解到:SQL group by returns just first row 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

如何?

最佳答案

您不能使用 ??? 代替 group_ID,因为它是一个 INT 字段。例如,您可以使用 0。尝试使用 CASE:

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;

SQLFiddle demo

关于mysql - SQL "group by"仅返回第一行 - 之二,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com