我有这个SQL查询

SELECT id, meta_key, meta_value, 
FROM  wp_posts post
INNER JOIN wp_postmeta meta 
ON post.ID = meta.POST_ID 
WHERE post.post_status = 'publish' 
AND ( meta.meta_key = 'brand' OR meta.meta_key = 'price' )

其结果如下所示

id --|-- meta_key --|--  meta_value
-----------------------------------
42 --|-- brand    --|--  mercedes
44 --|-- brand    --|--  honda
46 --|-- brand    --|--  honda
42 --|-- price    --|--  20
44 --|-- price    --|--  20
46 --|-- price    --|--  50

我怎么才能达到这样的结果呢?

brand --|-- UNIQUE ID COUNT  --|-- Total price sum of IDs relating to brand
----------------------------------------------
honda --|-------  2  ----------|-- 70
mercedes|-------  1  ----------|-- 20

我确实try 为品牌和价格设置了另一个结果栏,但仍然不太确定如何对结果进行分组

SELECT id, meta_key, meta_value,
(CASE WHEN meta_key = 'brand' THEN meta_value END) as brand,
(CASE WHEN meta_key = 'price' THEN meta_value END) as price
FROM  wp_posts post
INNER JOIN wp_postmeta meta 
ON post.ID = meta.POST_ID 
WHERE post.post_status = 'publish' 
AND ( meta.meta_key = 'brand' OR meta.meta_key = 'price' )

结果就是这样

id --|-- meta_key --|--  meta_value  --|-- brand  --|--  Price 
--------------------------------------------------------------
42 --|-- brand    --|--  mercedes    --|-- mercedes |--  NULL
44 --|-- brand    --|--  honda       --|-- honda  --|--  NULL
46 --|-- brand    --|--  honda       --|-- honda  --|--  NULL
42 --|-- price    --|--  20          --|-- NULL   --|--  20
44 --|-- price    --|--  20          --|-- NULL   --|--  20
46 --|-- price    --|--  50          --|-- NULL   --|--  50

感谢任何帮助

推荐答案

wp_postmeta的单个联接更改为两个单独的联接,一个用于品牌,一个用于价格:

select brands.meta_value brand
    , count(distinct posts.id) unique_id_count
    , sum(price.meta_value) price
from wp_posts posts
inner join wp_postmeta brands
    on posts.id = brands.post_id
    and brands.meta_key = 'brand'
inner join wp_postmeta price
    on posts.id = price.post_id
    and price.meta_key = 'price'
WHERE posts.post_status = 'publish' 
group by brands.meta_value

Mysql相关问答推荐

慢查询日志(log)甚至包括快速查询,因为它包括等待锁定所花费的时间

拒绝非超级用户访问停靠的MariaDB(超级用户工作)

左联接重复问题

使用NOT EXISTS()时出现MySQL查询错误

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

MySQL - 密码哈希没有预期的格式

将 Cloud Function (nodejs) 连接到 CloudSQL mySQL 数据库

MYSQL "Like" 正向和反向词序查询

在 SQL 中 for each 组返回具有最大值的行,包括具有相同值的行

在分组结果 MySQL 5.7 版中获取最多的重复值

限制正则​​表达式中多字符通配符的范围

如何使用 IF() 条件在 MySQL 中显示真假行

sql sum - 处理连接表中的脏重复项

避免重复进入mysql数据库的最佳方法

MySQL:将日期时间插入其他日期时间字段

字符ي和ی以及波斯语的区别 - Mysql

MySQL嵌套 Select 查询?

INSERT ... 使用 WHERE 进行重复的密钥更新?

MySQL 删除多列

如何将 mysqldump 的输出拆分为较小的文件?