[Mysql]:选择唯一w/join
我有一系列相关的表格 交易类型 事务ID主 交易金额 交易类型 交易 事务ID主 时间戳 购买 事务处理ID 项目编号 采购标识主 项目 项目编号 客户识别码 我需要根据时间戳和客户端id选择事务类型行 我的质询如下:[Mysql]:选择唯一w/join,mysql,join,Mysql,Join,我有一系列相关的表格 交易类型 事务ID主 交易金额 交易类型 交易 事务ID主 时间戳 购买 事务处理ID 项目编号 采购标识主 项目 项目编号 客户识别码 我需要根据时间戳和客户端id选择事务类型行 我的质询如下: SELECT SUM(tt.Transaction_Amount) FROM ItemTracker_dbo.Transaction_Type tt JOIN ItemTracker_dbo.Transaction t ON tt
SELECT
SUM(tt.Transaction_Amount)
FROM
ItemTracker_dbo.Transaction_Type tt
JOIN
ItemTracker_dbo.Transaction t
ON
tt.Transaction_ID = t.Transaction_ID
JOIN
ItemTracker_dbo.Purchase p
ON
p.Transaction_ID = tt.Transaction_ID
JOIN
ItemTracker_dbo.Item i
ON
i.Item_ID = p.Item_ID
WHERE
t.TimeStamp >= $start AND t.TimeStamp <= $end
AND
tt.Transaction_Format IN ('cash', 'credit')
AND
i.Client_ID = $client_ID
问题是:
如果客户在一个事务中购买了多个项目,则一个事务id在采购表中将有多行。因此,联接正在重复购买中有多行的交易id的交易金额
对于此查询,是否有方法将UNIQUE应用于purchase中的行
有没有其他方法可以绕过购买中的多行
还是需要重新评估数据库的体系结构
如果有任何其他信息对您有帮助,请告诉我。我认为您必须使用子查询-一个具有函数sum的子查询和一个具有DISTINCT的嵌套查询
SELECT SUM(Transaction_Amount)
FROM (
SELECT DISTINCT
tt.Transaction_Amount, t.Transaction_ID
FROM
ItemTracker_dbo.Transaction_Type tt
JOIN
ItemTracker_dbo.Transaction t
ON
tt.Transaction_ID = t.Transaction_ID
JOIN
ItemTracker_dbo.Purchase p
ON
p.Transaction_ID = tt.Transaction_ID
JOIN
ItemTracker_dbo.Item i
ON
i.Item_ID = p.Item_ID
WHERE
t.TimeStamp >= $start AND t.TimeStamp <= $end
AND
tt.Transaction_Format IN ('cash', 'credit')
AND
i.Client_ID = $client_ID
) table
我希望我理解你的问题。如果没有,请原谅误解您可以按交易ID和交易金额对结果进行分组,然后取其全局总和
select sum(Transaction_amount) from
(select Transaction_ID, Transaction_amount
from [...]
group by Transaction_ID, Transaction_amount) a
使用子查询
SELECT SUM(tt.Transaction_Amount)
FROM ItemTracker_dbo.Transaction_Type tt
WHERE tt.Transaction_ID IN
(SELECT t.Transaction_ID FROM
ItemTracker_dbo.Transaction t
JOIN
ItemTracker_dbo.Purchase p
ON
p.Transaction_ID = t.Transaction_ID
JOIN
ItemTracker_dbo.Item i
ON
i.Item_ID = p.Item_ID
WHERE
t.TimeStamp >= $start AND t.TimeStamp <= $end
AND
tt.Transaction_Format IN ('cash', 'credit')
AND
i.Client_ID = $client_ID)
需要使用内部选择,如下所示:
select sum(tt.Transaction_Amount)
from ItemTracker_dbo.Transaction_Type tt
inner join ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID
inner join
(select distinct(transaction_id) as transID
from Purchase as P
inner join Item as I on P.Item_ID = I.Item_ID
where I.Client_ID = $client_ID) blah
on t.Transaction_ID = blah.transID
t.TimeStamp >= $start AND t.TimeStamp <= $end
AND
tt.Transaction_Format IN ('cash', 'credit')
一个非常相似的——是的。但这是为了诊断问题——这是更具体的问题。如果我坚持这个问题,我就可以结束这个问题。我想你想做一个PIVOT,但我不确定mysql是否支持iThanks!在子查询的第一个连接中,它需要是t.transaction\u id而不是tt.transaction\u id这也是一个合法的解决方案