【发布时间】:2018-09-26 15:13:48
【问题描述】:
我有一个比赛,计算每个用户收集了多少物种。 这由 3 个表管理:
- 一个名为“sub”的父表带有集合,每个集合都是唯一的,有一个 id 并与一个用户 id 相关联。
+----+---------+ | id | user_id | +----+---------+ | 1 | 1 | | 2 | 10 | | 3 | 1 | | 4 | 3 | | 5 | 1 | | 6 | 10 | +----+---------+ - 名为“sub_items”的子表包含多条唯一的specs记录,并通过sub id to id与父表相关联。(每个sub可以有多个specs记录)
+----+--------+---------+--+
| id | sub_id | spec_id | |
+----+--------+---------+--+
| 1 | 1 | 1000 | |
| 2 | 1 | 1003 | |
| 3 | 1 | 2520 | |
| 4 | 2 | 7600 | |
| 5 | 2 | 1000 | |
| 6 | 3 | 15 | |
+----+--------+---------+--+
- 具有关联 user_id 的用户表
+--------+-------+--+
| usename | name |
+---------+-------+--+
| 1 | David |
| 10 | Ruth |
| 3 | Rick |
+--------+-------+--+
我需要按递减顺序列出具有最独特规格的用户。 预期输出: David 共有 2 个独特的规格。Ruth 共有 2 个独特的规格。
+--------+---------+
| id | total |
+----+-------------+
| David | 2 |
| Ruth | 2 |
| Rick | 2 |
+----+-------------+
到目前为止,我有这个,它产生了一个结果。但它不准确,它计算总记录。
我可能在子查询中的某处遗漏了一个 DISTINCT。
SELECT s.id, s.user_id,u.name, sum(t.count) as total
FROM sub s
LEFT JOIN (
SELECT id, sub_id, count(id) as count FROM sub_items GROUP BY sub_id
) t ON t.sub_id = s.id
LEFT JOIN user u ON u.username = s.user_id
GROUP BY user_id
ORDER BY total DESC
我看过this 解决方案,但它没有考虑独特的方面
【问题讨论】: