Mysql SQL中m/n连接表上的计数值
我有四个表,想知道某个名字有多少个位置和下载。Mysql SQL中m/n连接表上的计数值,mysql,sql,Mysql,Sql,我有四个表,想知道某个名字有多少个位置和下载。 名称和位置通过名称_位置表连接 这是我的桌子: 表“名称” 表“位置” 表“名称\u位置” 表“下载” 结果应该是: ID | name | locations | downloads ================================= 1 | foo | 1 | 3 2 | bar | 3 | 0 3 | zoo | 1 | 1 4 | luu | 0
名称
和位置
通过名称_位置
表连接
这是我的桌子:
表“名称
”
表“位置
”
表“名称\u位置
”
表“下载
”
结果应该是:
ID | name | locations | downloads
=================================
1 | foo | 1 | 3
2 | bar | 3 | 0
3 | zoo | 1 | 1
4 | luu | 0 | 1
以下是我的尝试(没有下载栏):
我想这会管用的
SELECT n.id,
n.name,
COUNT(DISTINCT l.id) AS locations,
COUNT(DISTINCT d.id) AS downloads
FROM names n LEFT JOIN names_location nl
ON n.id = nl.name_id
LEFT JOIN downloads dl
ON n.id = dl.name_id
LEFT JOIN locations l
ON l.id = nl.location_id
GROUP BY n.id, n.name
我想这会管用的
SELECT n.id,
n.name,
COUNT(DISTINCT l.id) AS locations,
COUNT(DISTINCT d.id) AS downloads
FROM names n LEFT JOIN names_location nl
ON n.id = nl.name_id
LEFT JOIN downloads dl
ON n.id = dl.name_id
LEFT JOIN locations l
ON l.id = nl.location_id
GROUP BY n.id, n.name
所有这些似乎都有效。这是另一个
SELECT
a.ID,
a.name,
COUNT(c.location) AS locations,
COUNT(d.timestamp) AS downloads
FROM names AS a
LEFT JOIN names_locations AS b on a.ID=b.name_id
LEFT JOIN locations AS c ON b.location_id=c.ID
LEFT JOIN downloads AS d ON a.ID=d.name_id
GROUP BY a.name
所有这些似乎都有效。这是另一个
SELECT
a.ID,
a.name,
COUNT(c.location) AS locations,
COUNT(d.timestamp) AS downloads
FROM names AS a
LEFT JOIN names_locations AS b on a.ID=b.name_id
LEFT JOIN locations AS c ON b.location_id=c.ID
LEFT JOIN downloads AS d ON a.ID=d.name_id
GROUP BY a.name
输出:
+------+------+-----------+-----------+
| id | name | locations | downloads |
+------+------+-----------+-----------+
| 1 | foo | 1 | 3 |
| 2 | bar | 3 | 0 |
| 3 | zoo | 1 | 1 |
| 4 | luu | 0 | 1 |
+------+------+-----------+-----------+
4 rows in set (0.00 sec)
输出:
+------+------+-----------+-----------+
| id | name | locations | downloads |
+------+------+-----------+-----------+
| 1 | foo | 1 | 3 |
| 2 | bar | 3 | 0 |
| 3 | zoo | 1 | 1 |
| 4 | luu | 0 | 1 |
+------+------+-----------+-----------+
4 rows in set (0.00 sec)
请更新您的问题,尝试解决此问题。@AgRizzo非常熟悉是的,这是我以前的问题。我无法理解id=1的位置计数是1,而id=2的位置计数是3。。如果我们正在考虑不同的位置,id=2的位置是否应该为2?@Nishant在名称位置表中有第三个
id=2
,请用您的尝试更新您的问题为了解决这个问题,@AgRizzo非常熟悉是的,这是我之前的问题。我无法理解id=1的位置数是1,而id=2的位置数是3。。如果我们考虑的是不同的位置,那么对于id=2,它不应该是2吗?@Nishant在names\u locations表中有第三个id=2
。我已经忘记了不同的位置,你明白了。对于id=2I,位置计数为2。我假设他们想要匹配不同的位置,也许不应该,因为他们在期望的输出中显示了3。用COUNT(DISTINCT nl.id)替换COUNT(DISTINCT l.id)将更改计数以匹配其示例output.yep。我已经忘记了不同的位置,你明白了。对于id=2I,位置计数为2。我假设他们想要匹配不同的位置,也许不应该,因为他们在期望的输出中显示了3。将计数(不同的l.id)替换为计数(不同的nl.id)将更改计数以匹配其示例输出。+---+----+----+----+----+----+----+----ID | name | locations | downloads |+----+----+----+----2 | bar | 3 | 0 | 1 | foo | 3 | 4 | luu | 0 | 1 |+------+------+-----------+-----------+设置4行(0.00秒)。。我运行了它,得到了如上所述的输出,这是预期的输出吗..是的,正如我在@Alden的回答中所评论的,我忘记了获得正确结果所需的DISTINCT()
部分。因此,我对他的回答投了赞成票。简单地用另一个人的答案更新我的答案是违背我的原则的。我不认为这是由于不同的原因。。因为id=2的位置计数为3。。它有一个重复的位置标识。哦,你说得对。。。六羟甲基三聚氰胺六甲醚。。那是。。想不到的也许他想要身份证的总数提出了一个解决方案,该解决方案给出了所需的o/p++-------++-------++-------++-------+--+--+--ID | name | locations | downloads |+-------+--+--+----+--2 | bar | 3 | 1 | foo | 3 | 4 | luu | 0 | 1 |+------+------+-----------+-----------+设置4行(0.00秒)。。我运行了它,得到了如上所述的输出,这是预期的输出吗..是的,正如我在@Alden的回答中所评论的,我忘记了获得正确结果所需的DISTINCT()
部分。因此,我对他的回答投了赞成票。简单地用另一个人的答案更新我的答案是违背我的原则的。我不认为这是由于不同的原因。。因为id=2的位置计数为3。。它有一个重复的位置标识。哦,你说得对。。。六羟甲基三聚氰胺六甲醚。。那是。。想不到的也许他想要身份证的总数提出了一个解决方案,给出了所需的o/p
SELECT
a.ID,
a.name,
COUNT(c.location) AS locations,
COUNT(d.timestamp) AS downloads
FROM names AS a
LEFT JOIN names_locations AS b on a.ID=b.name_id
LEFT JOIN locations AS c ON b.location_id=c.ID
LEFT JOIN downloads AS d ON a.ID=d.name_id
GROUP BY a.name
SELECT
t.id,t.n AS name,
count(location_id) AS locations,
t.downloads
FROM names_location
RIGHT JOIN
(SELECT
names.id AS id,
names.name AS n,
count(timestamp) AS downloads
FROM names
LEFT JOIN downloads ON names.id = downloads.name_id
GROUP BY id) AS t
ON t.id = names_location.name_id
GROUP BY t.id
+------+------+-----------+-----------+
| id | name | locations | downloads |
+------+------+-----------+-----------+
| 1 | foo | 1 | 3 |
| 2 | bar | 3 | 0 |
| 3 | zoo | 1 | 1 |
| 4 | luu | 0 | 1 |
+------+------+-----------+-----------+
4 rows in set (0.00 sec)