我想为给定ID具有唯一amount
,operation
,months
和fee
的每个数据集返回一行。
表格如下:
我几乎可以得到我想要的东西
SELECT amount, operation, months, fee, plan_id
FROM promo_discounts
WHERE promo_id = 1
GROUP BY amount, operation, months, fee
将获得:
但请注意,当我希望它返回plan_id
1, 2, 3
这可能吗?
答案 0 :(得分:32)
您可以使用GROUP_CONCAT
SELECT amount, operation, months, fee,
GROUP_CONCAT(DISTINCT plan_id SEPARATOR ',') AS plan_id
FROM promo_discounts
WHERE promo_id = 1
GROUP BY amount, operation, months, fee
请注意,默认最大长度为1024,因此如果您使用大表执行此操作,则可能会截断值...
答案 1 :(得分:6)
查看group_concat()功能。
SELECT *, GROUP_CONCAT(id SEPARATOR ",") AS grouped_ids FROM table
答案 2 :(得分:1)
在处理此问题时我想出的是将group by
结果与该组字段上的相同表格结合起来。请注意,WHERE
语句在两个选择中都是相同的
SELECT plan_id
FROM promo_discounts pd
JOIN (SELECT amount, operation, months, fee
FROM promo_discounts
WHERE promo_id = 1
GROUP BY amount, operation, months, fee
) AS grup ON pd.amount = grup.amount
AND pd.operation = grup.operation
AND pd.months = grup.months
AND pd.fee = grup.fee
WHERE promo_id = 1
现在您可以使用结果来获得您想要的内容
答案 3 :(得分:0)
如果你需要动态的话,我不推荐GROUP_CONCAT。 GROUP_CONCAT有一个限制。 您可以做的是使用临时表,您可以先在其中选择所有行,然后您可以获得分组结果。 要获取ID,您可以循环组并从临时表中选择具有所有组作为条件的WHERE子句。 我知道这对于这样的事情可能有点过于复杂,但我发现如果你真的需要跟踪ID,这是一个很好的解决方案。