如何在一个查询中使用 MySQL 的 SUM 和 COUNT

Ces*_*ich 1 mysql

不确定这是否可行,但我有以下内容

SELECT SUM(rating) as rating FROM details WHERE client_id = '$id'
Run Code Online (Sandbox Code Playgroud)

rating列包含用户的个人评分(1、2、3、4、5)星。我需要将它们全部相加才能计算平均值,但我也想知道用户获得的每个分隔符有多少颗星。

例如

该用户有3条记录,评分为(3,4,3)。对 3 条记录中的 10 条进行总和,我得到的平均值是 3.3。但我也愿意

3 stars = 2
4 stars = 1
Run Code Online (Sandbox Code Playgroud)

是否可以通过一个查询来完成此操作?

Hos*_*sam 5

如果我的问题正确,您可以使用 AVG() 函数而不是 SUM()。

在下面的查询中,它计算 this 的平均评分client_id,还根据问题的要求计算每个星星的数量。

SELECT
    AVG(rating) as rating,
    COUNT(CASE WHEN rating=1 THEN 1 END) as star_1,
    COUNT(CASE WHEN rating=2 THEN 1 END) as star_2,
    COUNT(CASE WHEN rating=3 THEN 1 END) as star_3,
    COUNT(CASE WHEN rating=4 THEN 1 END) as star_4,
    COUNT(CASE WHEN rating=5 THEN 1 END) as star_5
FROM
    details
WHERE
    client_id = ID_HERE
GROUP BY
    client_id
Run Code Online (Sandbox Code Playgroud)