显示最畅销的产品对

Posted

技术标签:

【中文标题】显示最畅销的产品对【英文标题】:Displaying top-selling product pairs 【发布时间】:2021-02-11 10:37:14 【问题描述】:

我有一个问题,我花了很多时间。我必须显示发票上出现的成对项目(项目 1、项目 2、数量) - 以及重复了多少对项目。将发票与货物联系起来的表称为“交易”。 我有 3 张桌子: 项目: IdItem、名称交易: IdTransaction、IdInvoice、IdItem发票: IdInvoice

SQL 查询的结果必须是:

项目1 |项目2 |编号

【问题讨论】:

您能与我们分享您的数据样本吗? 还请帮助我们了解“成对物品”的含义。物品是如何配对的,或者您的定义是什么? 【参考方案1】:

这听起来像是自联接和聚合:

select t1.IdItem as IdItem1, t2.IdItem as IdItem2, count(*)
from transactions t1 join
     transactions t2
     on t1.IdInvoice = t2.IdInvoice and
        t1.IdItem < t2.IdItem
group by t1.IdItem, t2.IdItem
order by count(*) desc;

【讨论】:

它的工作,这是我ment,谢谢! :)【参考方案2】:

假设您的表格如下所示:

CREATE TABLE Items (
   IDItem INT,
   Name VARCHAR,
   PRIMARY KEY(IDItem)
);

CREATE TABLE Invoices (
   IDInvoice INT,
   PRIMARY KEY(IDInvoice)
);
CREATE TABLE Transactions (
   IDTransaction INT,
   IDInvoice INT,
   IDItem INT,
   PRIMARY KEY(IDTransaction),
   FOREIGN KEY (IDItem) REFERENCES Items(IDItem),
   FOREIGN KEY (IDInvoices) REFERENCES Invoices(IDInvoices)
)

如果是这样,那么你需要像这样查询结果:

SELECT i.Name,in.IDInvoice FROM Transactions t
JOIN Items i ON i.IDItem = t.IDItem
JOIN Invoices in ON in.IDInvoice = t.IDInvoice
WHERE i.Name = item1

【讨论】:

以上是关于显示最畅销的产品对的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Magento 的产品列表页面上按最受欢迎(最畅销)的产品排序?

如何在Prestashop中展示畅销产品?

php 在woocommerce中展示最畅销的产品

Atom艾多美最畅销产品--Hemo him蜂蜜饮

如何通过在 Laravel 中对库存单位进行分组来找到畅销书?

Nerd的畅销产品