2013-04-15 32 views
1

我有以下SQL语句来计算基于3个Wordpress表的几个字段。我需要的是仅包含meta_key ='odd'和meta_value> ='1.5'的结果。我在WHERE语句中尝试过,但它不起作用,因为这个查询中的大多数结果都显示为Null。基于特定的meta_key和meta_value过滤postmeta

任何帮助非常感谢!

SELECT (display_name) AS 'user', 
    SUM(Case When meta_key = 'status' Then meta_value = 'won' else Null End) AS 'Won', 
    SUM(Case When meta_key = 'status' Then meta_value = 'lost' else Null End) AS 'Lost', 
    COUNT(Case When meta_key = 'odd' Then meta_value else Null End) AS 'Total', 
    ROUND (AVG(Case When meta_key = 'odd' Then meta_value else Null End), 2) AS 'Avg odd', 
    ROUND (AVG(Case When meta_key = 'bet' Then meta_value else Null End), 2) AS 'Avg bet', 
    ROUND (SUM(Case When meta_key = 'balance' Then meta_value else Null End), 2) AS 'Balance' 
FROM wp_postmeta pm 
INNER JOIN wp_posts p ON pm.post_id = p.ID 
INNER JOIN wp_users u ON p.post_author = u.ID 
WHERE Month(post_date) = MONTH(CURRENT_DATE) AND p.post_status='publish' AND pm.meta_key='odd' AND pm.met.value >='1.5' 
GROUP BY (display_name) 
ORDER BY Balance DESC 

回答

1

您需要将此移动到having条款:

SELECT (display_name) AS 'user', 
    SUM(Case When meta_key = 'status' Then meta_value = 'won' else Null End) AS 'Won', 
    SUM(Case When meta_key = 'status' Then meta_value = 'lost' else Null End) AS 'Lost', 
    COUNT(Case When meta_key = 'odd' Then meta_value else Null End) AS 'Total', 
    ROUND (AVG(Case When meta_key = 'odd' Then meta_value else Null End), 2) AS 'Avg odd', 
    ROUND (AVG(Case When meta_key = 'bet' Then meta_value else Null End), 2) AS 'Avg bet', 
    ROUND (SUM(Case When meta_key = 'balance' Then meta_value else Null End), 2) AS 'Balance' 
FROM wp_postmeta pm 
INNER JOIN wp_posts p ON pm.post_id = p.ID 
INNER JOIN wp_users u ON p.post_author = u.ID 
WHERE Month(post_date) = MONTH(CURRENT_DATE) AND p.post_status='publish' 
GROUP BY (display_name) 
having SUM(case when pm.meta_key='odd' AND pm.meta_value >='1.5' then 1 else 0 end) > 0 
ORDER BY Balance DESC 

这确定是否存在于每一个display_name这样的行。

+0

感谢您的回复。仍然不起作用,现在它显示每个meta_value的结果,即使它小于1.5,也不会过滤结果。你有什么想法,为什么?谢谢 – qebas

+1

@qebus。 。 。 meta_value如何存储?它是一个字符串还是数字? –

+0

这是一个字符串 – qebas

相关问题