![](/img/trans.png)
[英]MySQL - GROUP_CONCAT in WHERE | Less than or Bigger than value
[英]group_concat values greater than specific value
情況:
有兩個表Head
和Item
,其中每個Head與一個或多個Item
相關。 我想顯示每個項目每個月的每個項目數量的總和,以及所有大於特定值的所有數量的列表。
頭:
| 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腳本執行?
更新:我不希望數量小於等於4的數量被過濾掉,我只是不希望它們出現在數量列表中
修改您的GROUP_CONCAT
子句,如下所示:
GROUP_CONCAT(
IF(Item.Quantity > 4, Item.Quantity, NULL)
ORDER BY Item.Quantity DESC SEPARATOR ', '
)
這是GROUP_CONCAT()
因為GROUP_CONCAT()
忽略NULL值 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.