首页 > 解决方案 > SQL 对数据库中的用户按收到意见最多的排序

问题描述

我有两张桌子:

`users` (id, phone_number, first_name, last_name, email)
`opinions` (id, user_id, type, comment, date)

在第二个表opinions字段中type可能有值“正”或“负”。用户可能会收到多个正面和负面的意见。我想构建 sql 查询,它允许我按最多的正面或最多的负面意见对用户进行排序。

我已经创建了如下所示的 sql 查询,但它似乎不起作用,它正在合并一条记录中的意见总数,但我想按正面或负面意见的最高数量显示所有用户的排序表。不幸的是,我的例子不起作用,我不知道该怎么做。请你帮助我好吗?

SELECT
    users.*,
    count(opinions.id) as sum_negative
FROM users
    LEFT JOIN opinions ON opinions.user_id = users.id
WHERE
    opinions.type = 'negative'
ORDER BY sum_negative DESC

标签: sql

解决方案


您需要按用户 ID 对结果进行分组 https://www.w3schools.com/sql/sql_groupby.asp

SELECT
    users.*,
    count(opinions.id) as sum_negative
FROM users
    LEFT JOIN opinions ON opinions.user_id = users.id
WHERE
    opinions.type = 'negative'
GROUP BY users.id
ORDER BY sum_negative DESC

推荐阅读