Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        2年前关闭。
                                                                                            
                
        
关系

Supplier->与orders一对多关系

| suppliers                             |
| ----------                            |
| id | name | archived (bool) | user_id |

| orders                        |
| ----------------              |
| id | supplier_id | creator_id |


期望

现在,我想获取给定的supplierssupplier.user_id受欢迎的orders.creator_id列表,并且supplier不应为archived(请在问题末尾找到预期的结果)。

这是我想要的:


供应商最大订单数(count(orders.supplier_id))
其中provider.archived = false
其中provider.user_id = 2
其中orders.creator_id = 1


挂号失败

这是我失败的附件,我不确定如何在此查询中添加供应商条件。

  select supplier_id, COUNT(*) as count_suppliers
  from orders
  where creator_id = 2
  group by orders.supplier_id
  order by count_suppliers desc


所以这就是我想要的

suppliers

| id  | user_id | archived |
| --- | ---------  | -------  |
| 1   | 2          | false    |
| 2   | 2          | false    |
| 3   | 2          | false    |
| 4   | 2          | false    |
| 5   | 2          | true     |

orders

| id | creator_id | supplier_id  |
| -- | ---------  | ------------ |
| 1  | 1          | 1            |
| 2  | 1          | 1            |
| 3  | 1          | 1            |
| 4  | 1          | 1            |
| 5  | 1          | 2            |
| 6  | 1          | 2            |
| 7  | 1          | 3            |
| 8  | 1          | 4            |
| 9  | 1          | 4            |
| 10 | 1          | 4            |
| 11 | 1          | 5            |

expected output

| supplier_id | supplier_count |
| 1           | 4              |
| 4           | 3              |
| 2           | 2              |
| 3           | 1              |




因此,最后通过参考Vamsi的答案,在这里您可以找到针对此问题的解决方案的RAW SQL版本和ActiveRecord(Rails)版本:

RAW SQL VERSION

SELECT o.supplier_id, COUNT(*) AS count_suppliers
FROM suppliers s
JOIN orders o ON s.id=o.supplier_id
WHERE s.user_id=2
AND s.archived=FALSE
AND o.creator_id=2
GROUP BY o.supplier_id
ORDER BY count_suppliers DESC
LIMIT 5


ActiveRecord (Rails) Version

Supplier
  .joins(:orders)
  .where(user_id: 2, archived: false, orders: { creator_id: 2 })
  .group("orders.supplier_id")
  .order("count_all DESC")
  .limit(limit)
  .count

最佳答案

您可以join表和计数。

select p.supplier_id, COUNT(*) as count_suppliers
from purchase_orders p
join suppliers s on s.id=p.supplier_id
where s.user_id=2 and p.creator_id=1 and s.archived='False'
group by p.supplier_id
order by count_suppliers desc

10-08 13:28