group_concat值大于特定值

时间:2013-05-07 12:32:05

标签: mysql group-concat

情况:

有两个表HeadItem,其中每个表与一个或多个项目相关。我想显示每个项目,每月的每个项目数量的总和,以及所有大于特定值的数量的列表。

目:

| OrderID | Timestamp | <several other columns> |
-------------------------------------------------
|       1 |   6548972 | ...                     |
|      10 |   6548978 | ...                     |
|     ... |       ... | ...                     |
-------------------------------------------------

档案:

| ItemId | OrderID | Quantity | <several other columns> |
---------------------------------------------------------
|     21 |       1 |        5 | ...                     |
|     22 |       1 |        3 | ...                     |
|     25 |      10 |        1 | ...                     |
|    ... |     ... |      ... | ...                     |
---------------------------------------------------------

查询:

SELECT
    SUM(Item.Quantity) AS `total`,
    GROUP_CONCAT(Item.Quantity ORDER BY Item.Quantity DESC SEPARATOR ', ') AS `quantities`,
    FROM_UNIXTIME(Head.Timestamp, '%m') AS `month`,
    COUNT(Head.OrderID) AS `orders`,
    Item.ItemID,
FROM
    Item LEFT JOIN (Head) ON (Head.OrderID = Item.OrderID)
WHERE
    (Head.Timestamp BETWEEN <sometime> AND <someothertime>)
GROUP BY
    `month`,
    Item.ItemID
ORDER BY
    `total` ASC

我的工作:

鉴于上述情况和查询我能够实现我的目标,除了GROUP_CONCAT给出所有数量的列表,这是不希望的。相反,我希望显示的所有数量都更大,让我们说4

目前的结果:

| total | quantities | month | orders | ItemID |
------------------------------------------------
|     8 | 5, 2, 1    |    04 |      3 |     21 |
|     3 | 3          |    04 |      1 |     22 |
|    20 | 10, 9, 1   |    04 |      3 |     25 |

期望的结果:

| total | quantitiesGreater4 | month | orders | ItemID |
--------------------------------------------------------
|     8 | 5                  |    04 |      3 |     21 |
|     3 |                    |    04 |      1 |     22 |
|    20 | 10, 9              |    04 |      3 |     25 |

最后一个问题:

有没有办法修改原始查询以显示所需的结果?或者我的PHP脚本会更好地执行这种工作吗?

更新 我不希望将数量&lt; = 4过滤掉,我只是不希望它们在数量列表中

1 个答案:

答案 0 :(得分:1)

修改您的GROUP_CONCAT子句,如下所示:

GROUP_CONCAT(
    IF(Item.Quantity > 4, Item.Quantity, NULL)
    ORDER BY Item.Quantity DESC SEPARATOR ', '
)

这可行,因为GROUP_CONCAT() ignores NULL values