问题描述
我正在运行sql命令以计算多个wordpress元值,但是我却获得了所需的其他形式
select
sum(um.Meta_value = '< 2000') '2000',sum(um.Meta_value = '2000-3499') '2000-3499',sum(um.Meta_value = '3500-4999') '3500-4999',sum(um.Meta_value = '5000-7499') '5000-7499',sum(um.Meta_value = '7500-9999') '7500-9999',sum(um.Meta_value = '10000 >') '10000>'
from wp_userMeta um
join wp_users u on u.id = um.user_id
where um.Meta_key = 'income-range'
我得到的输出:
我需要它显示如下:
select
um.Meta_value,SUM(CASE WHEN (um.Meta_value = '< 2000') THEN 1 END) AS '<2000',SUM(CASE WHEN (um.Meta_value = '2000-3499') THEN 1 END) AS '2000-3499',SUM(CASE WHEN (um.Meta_value = '3500-4999') THEN 1 END) AS '3500-4999',SUM(CASE WHEN (um.Meta_value = '5000-7499') THEN 1 END) AS '5000-7499',SUM(CASE WHEN (um.Meta_value = '7500-9999') THEN 1 END) AS '7500-9999',SUM(CASE WHEN (um.Meta_value = 'c') THEN 1 END) AS '7500-9999'
from wp_userMeta um
left join wp_users u on u.id = um.user_id
where um.Meta_key = 'income-range'
GROUP BY um.Meta_value
我也不喜欢此输出,因此它必须是两列:
解决方法
您似乎想要简单的聚合,也许可以使用case
表达式来实现转码:
select
case um.meta_value
when 'c' then '> 10000'
else um.meta_value
end as income_range
count(*) total
from wp_usermeta um
join wp_users u on u.id = um.user_id
where um.meta_key = 'income-range'
group by income_range
,
我基本上对特定的meta_key进行了一次计数,并对元值进行了分组。
SELECT meta_value,COUNT( * ) c FROM wp_usermeta um WHERE meta_key = 'income-range' GROUP BY meta_value