基于COL2分组的MYSQL Col1和

时间:2017-05-15 05:19:39

标签: mysql

我正在查询Wordpress postmeta表,试图通过客户提取一些销售信息。如何将客户组合在一起。这里的挑战是所有数据都在postmeta表中。

到目前为止,我的尝试失败了:

SELECT CONCAT_WS(" ", metaA.meta_value, metaB.meta_value) AS customer_name, metaC.meta_value AS 'Total'
FROM wp_postmeta AS metaA
JOIN wp_postmeta AS metaB USING (post_id)
JOIN wp_postmeta AS metaC USING (post_id)
WHERE (metaA.meta_key = '_billing_first_name')
AND (metaB.meta_key = '_billing_last_name')
AND (metaC.meta_key = '_order_total')
GROUP BY metaA.meta_value, metaB.meta_value, metaC.meta_value

结果:

+---------------+---------+
| customer_name |  Total  |
+---------------+---------+
|     customer1 |      10 |
|     customer1 |      50 |
|     customer1 |      90 |
|     customer2 |      40 |
|     customer3 |      10 |
|     customer3 |      10 |
|     customer4 |      20 |
+---------------+---------+

我想得到:

+---------------+---------+
| customer_name |  Total  |
+---------------+---------+
|     customer1 |     150 |
|     customer2 |      40 |
|     customer3 |      20 |
|     customer4 |      20 |
+---------------+---------+

4 个答案:

答案 0 :(得分:2)

您需要按连接的客户名称进行分组并对metaC.meta_value求和:

SELECT CONCAT_WS(" ", metaA.meta_value, metaB.meta_value) AS customer_name, sum(metaC.meta_value) AS 'Total'
FROM wp_postmeta AS metaA
JOIN wp_postmeta AS metaB USING (post_id)
JOIN wp_postmeta AS metaC USING (post_id)
WHERE (metaA.meta_key = '_billing_first_name')
    AND (metaB.meta_key = '_billing_last_name')
    AND (metaC.meta_key = '_order_total')
GROUP BY CONCAT_WS(" ", metaA.meta_value, metaB.meta_value)

答案 1 :(得分:1)

这个怎么样?

map

答案 2 :(得分:1)

试试这个。

SELECT customer_name, sum(total) as total from
(SELECT CONCAT_WS(" ", metaA.meta_value, metaB.meta_value) AS customer_name, metaC.meta_value AS 'Total'
FROM wp_postmeta AS metaA
JOIN wp_postmeta AS metaB USING (post_id)
JOIN wp_postmeta AS metaC USING (post_id)
WHERE (metaA.meta_key = '_billing_first_name')
AND (metaB.meta_key = '_billing_last_name')
AND (metaC.meta_key = '_order_total')
GROUP BY metaA.meta_value, metaB.meta_value, metaC.meta_value) t
Group by customer_name

答案 3 :(得分:-1)

以下脚本适合您:

SELECT customer_name, sum(total_order) from
(
  SELECT CONCAT_WS(" ", metaA.meta_value, metaB.meta_value) AS customer_name, metaC.meta_value AS total_order
  FROM wp_postmeta AS metaA
  JOIN wp_postmeta AS metaB USING (post_id)
  JOIN wp_postmeta AS metaC USING (post_id)
  WHERE (metaA.meta_key = '_billing_first_name')
  AND (metaB.meta_key = '_billing_last_name')
  AND (metaC.meta_key = '_order_total')
)
group by customer_name