显示最畅销的产品对
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 的产品列表页面上按最受欢迎(最畅销)的产品排序?