mysql - 结果中 5 个可能值中缺少的值的“默认”值

标签 mysql

我在想以一种相当奇怪的方式从数据库获取东西时遇到了一些麻烦。假设我有下一张 table

ID  |   Rating
229 |   3
229 |   2
229 |   4
229 |   2
240 |   3
233 |   1
233 |   4
233 |   1
233 |   5
229 |   4
240 |   4

我需要结果看起来像

229 |   0,2,1,2,0
233 |   1,1,0,0,2
240 |   0,1,1,0,0

基本上。评级在 1 到 5 之间变化。对于 id 没有的每个评级,我需要在第二列中输入 0。因此,对于 id 229,它是 0,2,1,2,0,因为它没有 5 和 1 评级;对于 240,它是 0,1,1,0,0,因为没有 5、2 和 1 评级。 目前我有疑问

select object_id, group_concat(qty order by rating desc) as qties
from (
select object_id, rating, count(rating) qty
from wp_fb_ratings
group by rating, object_id
) n
group by object_id

它选择我需要的内容,但它不会对缺失的评分进行“零填充”计数。可以做我想做的事吗?

最佳答案

你可以做到

SELECT id, GROUP_CONCAT(rating_count ORDER BY rating DESC) rating_count
  FROM
(
  SELECT l.id, l.rating, COUNT(r.rating) rating_count
    FROM
  (
    SELECT id, rating
      FROM
    (
      SELECT DISTINCT id 
        FROM wp_fb_ratings
    ) d CROSS JOIN
    (
      SELECT 1 rating UNION ALL
      SELECT 2 UNION ALL
      SELECT 3 UNION ALL
      SELECT 4 UNION ALL
      SELECT 5 
    ) a
  ) l LEFT JOIN wp_fb_ratings r
      ON l.id = r.id
     AND l.rating = r.rating
  GROUP BY l.id, l.rating
) q
 GROUP BY id

输出:

|  id | rating_count |
|-----|--------------|
| 229 |    0,2,1,2,0 |
| 233 |    1,1,0,0,2 |
| 240 |    0,1,1,0,0 |

这是一个 SQLFiddle 演示

关于mysql - 结果中 5 个可能值中缺少的值的“默认”值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29722476/

相关文章:

mysql - MySQL 中的元表

mysql - mysql 中的 max() 返回 9999 不超过那个?

php - SQL Rand() 给出结果集但无法获取结果

mysql - PHP Datetime 对象输出尾随零,影响对 MySQL 日期时间的查询

如果任何字段包含 NULL,MySQL CONCAT 将返回 NULL

mysql - 如何获取求和形式的查询结果

mysql - 如何用递减的负数更新空值 id?

PHP::PDO 多次打开/关闭连接

mysql - 创建并引用表的表

MySQL REGEXP 仅匹配给定目录的子目录