我正在为我的作业分配一个问题,在该问题中,我必须检查订单数据库,以查看是否有某本书以相同的顺序被多次订购。
这是一个例子:
+----------+------------+---------+----------+-------------+
| order_id | order_line | book_id | quantity | order_price |
+----------+------------+---------+----------+-------------+
| 33034 | 1 | 1619 | 1 | 29.99 |
| 33034 | 2 | 6789 | 1 | 25.95 |
| 33034 | 3 | 1619 | 5 | 15.95 |
| 33189 | 1 | 1667 | 2 | 25.95 |
| 40564 | 1 | 4739 | 2 | 20.99 |
| 11357 | 1 | 1667 | 2 | 35.95 |
因此,命令33034两次订购了书1619。我无法弄清楚如何仅提取正确的订单ID
截至目前,看来我的查询可以测试多个book_id中的一个,然后测试关联的order_id,但我无法获得将两者连接的逻辑。
该查询必不可少地说“同一本书?检查!关联的order_id的订购量是否超过任何两本书?检查!”我需要它来确保订购了不止一本相同的书。
我不能使用联接,只能使用子查询。
我很难缠到下一步要走的地方,但这是到目前为止。
select order_id
from a_bkorders.order_details
where book_id in (
select book_id
from a_bkorders.order_details
group by book_id
having count(book_id)>1)
group by order_id
having count(order_id)>1)
感谢您的任何建议帮助!
最佳答案
为什么不只是使用
SELECT a.order_id FROM
(SELECT order_id, book_id, COUNT(*)
FROM a_bkorders.order_details
GROUP BY order_id, book_id
HAVING count(*)>1
) AS a
从技术上讲,您应该使用SELECT DISTINCT(因为一个订单可能有两个书ID,每个书ID被订购两次)。但是否则,这应该做得到(您遵循逻辑,是吗?它使用子查询来查找多个订单和书籍ID串联出现的顺序;从那里,从那个order_id,book_id和count列表中获取order_ids ()的count()> 1)。
现在,所有这一切都在一个特定的假设下进行,即“如果某本书按同一顺序多次订购”->出现为订单项两次的任何书(例如count()> 1),而不是任何一本书> 1的数量(例如count()> 1或数量> 1)
如果您需要检查数量> 1或count(*)是否大于一,我建议以下方法:
SELECT a.order_id FROM
(SELECT order_id, book_id, SUM(quantity)
FROM a_bkorders.order_details
GROUP BY order_id, book_id
HAVING SUM(quantity) > 1
) AS a
如果不明显,则如果count(*)> 1,则SUM(quantity)将> 1;如果数量> 1,则SUM(quantity)也将> 1。
关于mysql - 查询以获取重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23091553/