簡體   English   中英

MySQL選擇-按組計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM