關係如何獲得與第一
Supplier
大部分訂單的供應商列表 - >一對多的關係與orders
| suppliers |
| ---------- |
| id | name | archived (bool) | user_id |
| orders |
| ---------------- |
| id | supplier_id | creator_id |
期望
現在,我想名單對於給定的supplier.user_id
和orders.creator_id
以及那個supplier
不應該是archived
(請在問題最後找到預期結果)。
這裏是我想:
- 供應商ORDER BY最大(計數(orders.supplier_id))
- 其中supplier.archived =假
- 其中supplier.user_id = 2
- 哪裏orders.creator_id = 1
不成功Attampt
這是我的失敗attampt,我不知道如何在此查詢中添加供應商條件。
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 |
SOLUTION
所以最後參照Vamsi的答案,在這裏你可以找到包括原始版本的SQL和ActiveRecord的(滑軌)此問題的解決方案版本:
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
首先弄清楚這RBDMS你使用。然後請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-查詢 – Strawberry
我錯過了'JOIN'部分。 Vamsi Prabhala的答案爲我工作。 – przbadu