2012-04-04 86 views
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' 

看到的结果截图进行验证

enter image description here

结果所需

NULL - 50 NULL 
50 - 30 20 
65 - 33 32 
NULL - 16 NULL 
+0

原谅我,但最新你的问题?你有一个SQL语句和输出..你有错误吗? – BugFinder 2012-04-04 15:48:04

+0

为什么你的最后一列应该是空的?因为'user_rating'与'tomato_rating'不匹配? – 2012-04-04 15:51:22

回答

1

我认为这是你在找什么:你正在使用,而不是NULL'NULL'

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' 

通知。

+0

Thanx分享你的经验与我(真棒)@Mosty Mostacho – 2012-04-04 15:58:50

2

如果我理解你的问题,如果想返回。

要做到这一点,你可以使用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' 
+0

嗯,不知道'NULLIF'和'IFNULL'。 – talereader 2012-04-04 15:53:50

+0

@telereader注意原始查询中没有空值。这是字符串“NULL”什么是返回 – 2012-04-04 15:55:55

+0

Thanx分享你的经验与我(真棒@迈克尔Ferdrickson我致敬你的经验) – 2012-04-04 15:56:05

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'