列出组查询中的ID

时间:2011-12-19 20:31:28

标签: mysql group-by

我想为给定ID具有唯一amountoperationmonthsfee的每个数据集返回一行。

表格如下:

enter image description here

我几乎可以得到我想要的东西

SELECT amount, operation, months, fee, plan_id
FROM promo_discounts
WHERE promo_id = 1
GROUP BY amount, operation, months, fee

将获得:

enter image description here

但请注意,当我希望它返回plan_id

之类的内容时,它只返回一个1, 2, 3

这可能吗?

4 个答案:

答案 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,这是一个很好的解决方案。