2

询问

SELECT
  CASE
  WHEN `tomato_rating` = 0 THEN 'NULL'
  WHEN `tomato_rating` != 0 THEN `tomato_rating`
  END `tomato_rating`,
  ur.`user_rating`, 
  ABS(tomato_rating - ur.`user_rating`) AS avg_guess_error  
FROM user_rating ur
  LEFT JOIN videos v
    ON ur.vid_id = v.id
WHERE ur.user_id = '1'

查看结果截图进行验证

在此处输入图像描述

结果必填

NULL - 50 NULL
50   - 30 20
65   - 33 32
NULL - 16 NULL
4

3 回答 3

2

如果我理解你的问题,你想返回NULLif tomato_rating = 0

为此,您可以使用以下NULLIF功能:

SELECT
  NULLIF(`tomato_rating`, 0) AS `tomato_rating`,
  ur.`user_rating`, 
  ABS(NULLIF(`tomato_rating`, 0) - ur.`user_rating`) AS avg_guess_error  
FROM user_rating ur
  LEFT JOIN videos v
    ON ur.vid_id = v.id
WHERE ur.user_id = '1'
于 2012-04-04T15:50:13.840 回答
1

I think this is what you're looking for:

SELECT
  IF (`tomato_rating` = 0, 'NULL', `tomato_rating`) as `tomato_rating`,
  ur.`user_rating`,
  IF (`tomato_rating` = 0, 'NULL', ABS(tomato_rating - ur.`user_rating`))
    as avg_guess_error  
FROM user_rating ur
LEFT JOIN videos v ON ur.vid_id = v.id
WHERE ur.user_id = '1'

Notice that you're using string 'NULL' instead of NULL.

于 2012-04-04T15:50:56.883 回答
0

这是你要找的吗?

SELECT
CASE
WHEN `tomato_rating` = 0 THEN 'NULL'
WHEN `tomato_rating` != 0 THEN `tomato_rating`
END `tomato_rating`,
ur.`user_rating`, 
CASE
WHEN `tomato_rating` = 0 THEN 'NULL'
WHEN `tomato_rating` != 0 THEN ABS(tomato_rating - ur.`user_rating`) 
END `avg_guess_error`,  
FROM user_rating ur
LEFT JOIN videos v
ON ur.vid_id = v.id
WHERE ur.user_id = '1'
于 2012-04-04T15:50:14.630 回答