【问题标题】:How to join several tables with sum如何用 sum 连接几个表
【发布时间】:2017-12-27 02:22:14
【问题描述】:

我想按访问次数对类别进行分类

类别有任务,任务有访问。我有四张桌子:

1)visits
     -id

2)category 
    -id

3)tasks
    -id
    -category_id

4)task_visit
   -task_id
   -visit_id

我现在拥有的:

-按访问排序任务

SELECT count(task_id) as count, task_id
FROM task_visit
GROUP BY task_id
ORDER BY count DESC;

-用任务加入类别

SELECT *
FROM categories
JOIN tasks
    ON categories.id = tasks.category_id
ORDER BY categories.id;

-尝试将类别与任务连接并计算访问次数(不起作用),然后按类别进行汇总

SELECT *
FROM categories
JOIN tasks
    ON categories.id = tasks.category_id
ORDER BY categories.id
JOIN
(
    SELECT count(task_id) as count, task_id
    FROM task_visit
    GROUP BY task_id
    ORDER BY count
) ON tasks.id = task_visit.task_id;

那么,如何按访问次数对类别进行排序?

【问题讨论】:

  • 你能像post一样添加表格吗?
  • 给出一些示例数据,您的预期结果是什么。

标签: php mysql sql database join


【解决方案1】:

您只需要 categorytaskstask_visit 表之间的连接,以及按类别聚合:

SELECT
    c.id,
    COUNT(tv.visit_id) AS cnt
FROM category c
LEFT JOIN tasks t
    ON c.id = t.category_id
LEFT JOIN task_visit tv
    ON tv.task_id = t.id
GROUP BY
    c.id
ORDER BY cnt DESC;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多