长时间用户,第一次张贴海报。我发现了类似的问题/答案,通常涉及子查询,但我不知道如何适用于我的情况。mysql - 两个左连接 - 双重计数
我有3个表:
table1
id
table2
id | val (each id has 1 of 3 possible values)
table3
id | val (each id has 1 of 3 possible values)
编辑:例如:(表1 =每个人的唯一的ID谁参加了一个主题公园,表2 =每个访问者访问了哪些景点第一;表3 =其吸引每个访问者访问第二)。
我想编写一个查询查找7个不同的计数: (1)在表1的唯一ID的数量 (2)让每个可能的值在表2 ID数的计数(3具有每一个可能值的表3中的ID的数量)计数
我的MySQL查询:
SELECT
count(DISTINCT table1.id) AS x1,
SUM(IF(table2.val='1'),1,0)) AS x2,
SUM(IF(table2.val='2'),1,0)) AS x3,
SUM(IF(table2.val='3'),1,0)) AS x4,
SUM(IF(table3.val='1'),1,0)) AS x5,
SUM(IF(table3.val='2'),1,0)) AS x6,
SUM(IF(table3.val='3'),1,0)) AS x7
FROM
table1
LEFT JOIN
table2 ON table1.id=table2.id
LEFT JOIN
table3 ON table1.id=table3.id
结果:
X1 =正确的(因为DISTINCT)
X2,X3,X4 =正确
X5,X6,X7 = TWICE他们应该是多少(因为我得到笛卡尔积?)
有什么建议?
您是否考虑过在子查询中单独计算表,然后连接两个子查询的结果? –
这可能是我需要做的,但是我从来没有做过再次选择,也不知道如何以这种方式重新编写我的查询。 – egret
用户错误。原来我在表2中有重复的记录.ID应该是唯一的,但不能强制在表定义中。因此重复计算。感谢所有对此评论的人。尝试每一个建议帮助我理解发生了什么。 – egret