$query = "SELECT a.client_id,
a.percent,
b.percent,
c. percent,
d. percent
FROM sectionone a,
sectiontwo b,
sectionthree c,
sectionfour d
WHERE a.client_id = b.client_id
AND b.client_id = c.client_id
AND c.client_id = d.client_id";
答案 0 :(得分:1)
很难从您的问题中判断出您的sectionone
,sectiontwo
等表格是否为每个客户提供了一行。
可能的情况是这些。
client
和sectionone
等之间的精确一对一关系在你的问题的界限之间阅读,我认为你相信你有第一种情况,但你实际上有第三种情况。也就是说,您可能有多个sectionthree
行用于特定客户端ID。
对于每个看起来像这样的客户,您在结果集中想要的是一行。
clientid one two three four
123 45 55 20 56
对于像这样的查询来说,清楚地想象出你想要的结果集是很重要的。但你知道的。
所以,我们走了。我们需要逐个总结sectionX
表,因为我们必须创建一个错误,即每个客户端只有一行,即使它们没有。
SELECT client_id, AVG(percent) AS percent
FROM sectionone
GROUP BY client_id
相同的查询适用于所有四个sectionX
表。对于主要查询的其余部分,我们将使用其中四个摘要查询作为虚拟表。
接下来,我们必须将这四个摘要查询加入client
表。我们应该使用LEFT JOIN命令来涵盖sectionX
表可能包含特定客户端零行的情况。
SELECT z.client_id, a.percent AS one, b.percent AS two,
c.percent AS three, d.percent AS four
FROM client as z
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectionone
GROUP BY client_id
) AS a ON z.client_id = a.client_id
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectiontwo
GROUP BY client_id
) AS b ON z.client_id = b.client_id
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectionthree
GROUP BY client_id
) AS c ON z.client_id = c.client_id
LEFT JOIN (
SELECT client_id, AVG(percent) AS percent
FROM sectionfour
GROUP BY client_id
) AS d ON z.client_id = d.client_id
最后,如果您只想要一个client_id,则应使用
结束查询 WHERE z.client_id = whatever
如果客户端的sectionX
表中有多行,则此方法采用其值的平均值。如果你需要其他东西,比如MAX,MIN等,你可以在查询中使用它。
这看起来很复杂,但实际上很简单,如果你可以简单地调用五向表LEFT JOIN :-)。它适用于本答案开头提到的所有三种情况。
更重要的是,MySQL(和其他SQL系统)在优化这种查询方面做得非常好,因为它很常见。
答案 1 :(得分:0)
$query = "SELECT a.client_id,
a.percent,
b.percent,
c. percent,
d. percent
FROM sectionone a,
sectiontwo b,
sectionthree c,
sectionfour d
WHERE a.client_id = b.client_id
AND b.client_id = c.client_id
AND c.client_id = d.client_id
AND a.client_id = 1
";
答案 2 :(得分:0)
感谢您的帮助,我现在有了正确的答案:
$query = "SELECT a.client_id,
a.percent,
b.percent,
c. percent,
d. percent
FROM sectionone a,
sectiontwo b,
sectionthree c,
sectionfour d
WHERE a.client_id = b.client_id
AND b.client_id = c.client_id
AND c.client_id = d.client_id
添加了其他代码
ORDER BY client_id DESC";
这为当前用户提供了结果。非常高兴,罗西