如何在GROUP BY上设置IF语句

时间:2012-07-12 00:01:18

标签: mysql group-by

您好我有疑问令人困惑,这是查询

SELECT meta_value, meta_count, post_id
FROM wp_post_meta
GROUP BY IF(ISNULL(target_key), '', target_key) 
ORDER BY `meta_count` DESC 
LIMIT 30

某些目标键为空但有些值存在,如果target_key为value,如何生成结果使其成为GROUP BY但如果禁用空GROUP BY

任何人都可以帮助我?

2 个答案:

答案 0 :(得分:2)

target_keynull时,您可以使用每个记录唯一的值进行分组,以便这些记录最终都在各自的组中。例如,如果post_id是表的键,则可以按此分组。如果密钥可能与target_key字段具有相同的值,则可能需要为不同的值添加前缀:

GROUP BY IF(ISNULL(target_key), 'x' + post_id, 'y' + target_key)

请注意,您的查询是在target_key上进行分组,但是您在不使用聚合(min,max,count,et.c。)的情况下选择其他字段,因此结果将是来自任意记录中的任意记录的值每组。如果这些值对于每个组中的所有记录都不相同,则结果是不可预测的。

答案 1 :(得分:2)

SELECT meta_value,meta_count,post_id
FROM wp_post_meta
WHERE target_key IS NOT NULL
GROUP BY target_key

UNION ALL

SELECT meta_value,meta_count,post_id
FROM wp_post_meta
WHERE target_key IS NULL

ORDER BY meta_count DESC
LIMIT 30

只是一个粗略的想法。但是没有经过测试,我不确定这是不是你想要的。