[英]MySQL select - get count by group
我有兩個連接和分組的表,一個是Orders,另一個是Items。
我想得到的是x周期內的訂單數量。
因此,我最初的想法是首先獲取每個訂單在數據集中發生的次數的計數,然后將每行除以上述數字,例如,訂單ID 1出現3次,因此計數為0.33,即* 3 = 1訂購。
但是我在第一步中遇到麻煩,無法獲得正確的order.id出現次數。
我希望顯示的是這樣的:
+-------+---------+------+
|order |item |count |
|number | | |
+-------+---------+------+
| 1 | ABC | 3 |
+-------+---------+------+
| 1 | DEF | 3 |
+-------+---------+------+
| 1 | GHI | 3 |
+-------+---------+------+
| 2 | ABC | 2 |
+-------+---------+------+
| 2 | DEF | 2 |
+-------+---------+------+
| 3 | ABC | 1 |
+-------+---------+------+
但我只是這樣得到它:
+-------+---------+------+
|order |item |count |
|number | | |
+-------+---------+------+
| 1 | ABC | 1 |
+-------+---------+------+
| 1 | DEF | 1 |
+-------+---------+------+
| 1 | GHI | 1 |
+-------+---------+------+
| 2 | ABC | 1 |
+-------+---------+------+
| 2 | DEF | 1 |
+-------+---------+------+
| 3 | ABC | 1 |
+-------+---------+------+
這是我的查詢:
SELECT
`orders`.`id` as 'order number',
`item`.`item`,
COUNT(`orders`.`id`) as ' count'
FROM `db`.`orders`
LEFT JOIN `item` ON `item`.`order_id` = `order`.`order_id`
GROUP BY `orders`.`id`, `item`.`item`
;
怎么樣?
您的查詢應為-
SELECT
`item`.`item`,
COUNT(`orders`.`id`) as 'count'
FROM `db`.`orders`
JOIN `item` ON `item`.`order_id` = `order`.`order_id`
GROUP BY `item`.`item`;
我不認為您需要多次獲取相同的項目行,因為您試圖獲得明智的項目計數。
更新:您可以通過此方法獲得所需的結果
SELECT t1.order_id, t2.item, t1.cnt FROM
(
SELECT o.order_id,COUNT(i.items) cnt FROM
item i
JOIN orders o ON o.order_id=i.order_id
group by o.order_id
) t1
JOIN
item t2 ON t1.order_id=t2.order_id;
您應該嘗試遵循
Select
`order`.`order_id`,
`item`.`item`,
`order`.`count`
from
(
SELECT
`orders`.`id` as order_id,
COUNT(*) as 'count'
FROM `db`.`orders`
group by `orders`.`id`
) as order
JOIN `item` ON `item`.`order_id` = `order`.`order_id`
在朋友的幫助下,我最終通過使用以下命令獲得了想要的東西:
SELECT
orders.id as 'order number',
items.item,
(SELECT count(*) FROM db.items where items.id = sales.id) as 'order_count'
FROM db.orders
GROUP BY orders.id, items.item
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.