为什么mysql中的UNION ALL命令不';你不给我任何结果吗?

为什么mysql中的UNION ALL命令不';你不给我任何结果吗?,mysql,Mysql,我正试图将两个查询合并为一个查询,但UNION对我不起作用。 代码如下: SELECT Customer_A, Activity, Customer_P, Purchase FROM ( SELECT buyer_id as Customer_A, COUNT(buyer_id) As Activity FROM customer_info_mxs GROUP BY buyer_id UNION ALL SELECT buyer_id as Customer_P, SUM(purchase_

我正试图将两个查询合并为一个查询,但UNION对我不起作用。 代码如下:

SELECT
Customer_A,
Activity,
Customer_P,
Purchase
FROM (
SELECT 
buyer_id as Customer_A,
COUNT(buyer_id) As Activity
FROM 
customer_info_mxs
GROUP BY buyer_id
UNION ALL
SELECT
buyer_id as Customer_P,
SUM(purchase_amount) As Purchase
FROM 
customer_info_mxs
GROUP BY buyer_id
)sub

我希望结果有4列,但我得到了2列(Customer_a)和(Activity)。

如果查询应该返回一个客户列表、他们的购买数量和他们花费的总金额,那么您可以使用如下单个查询:

SELECT mxs.buyer_id as Customer,
       COUNT(mxs.purchase_id) As Activity,
       SUM(mxs.purchase_amount) As Purchases
  FROM customer_info_mxs mxs
 GROUP BY mxs.buyer_id;
否则,您的第一个子查询将始终是
buyer\u id
1
的值


如果您希望看到该编号,请务必将
purchase\u id
更改为每次购买的唯一
id

我认为工会声明有些混乱。union语句返回一个行集,该行集是所有“unioned”查询的总和;由于这些查询只有两列,因此组合输出只有两列。列具有不同名称这一事实与此无关。输出中的列名将从联合的第一个查询中应用

一个选择就是这样做

select buyer_id, count(buyer_id), sum(purchase_amount) from customer_info_mxs group by buyer_id
从您的问题来看,您似乎正在尝试进行透视,将一些行转换为其他列。那可以用。。。有些困难。

我读了你的评论, '主要目标是创建一个数据集,其中返回5列:Customer_a、Activity(前100)、Customer_P、Purchase(前100)、Activity和Purchase的内部联接'

请尝试此查询

SET @row_number = 0, @row_number2 = 0; 
SELECT t1.Customer_A,t1.Activity, t2.Customer_P, t2.Purchase
from (
      SELECT (@row_number:=@row_number + 1) AS n, t.Customer_a, t.Activity
      from (
            select buyer_id as Customer_A,COUNT(buyer_id) As Activity
            FROM customer_info_mxs
            GROUP BY buyer_id
            order by Activity desc
            Limit 100
            )t
      ) t1
left join (
      SELECT (@row_number2:=@row_number2 + 1) AS n, 
      FROM (
            select buyer_id as Customer_P, SUM(purchase_amount) Purchase
            FROM customer_info_mxs
            GROUP BY buyer_id
            order by Purchase desc
            Limit 100
            )t
      ) t2 on t2.n=t1.n

基本思想是,我只是在表1(t1)中创建了一些临时数字0-99,并将其连接到表2(t2)中的临时数字。

这里可能不适合联合查询。在预期的4列输出中,
Customer\u A
Customer\u P
的值相等吗?(它们是否打算是相同的买家id)欢迎使用SO-在发布SQL问题时,如果您可以包括相关表中的一小部分行样本,以及您希望这些行的查询输出的样本,这将对我们有所帮助。嘿,感谢您的回复。虽然Customer_A和Customer_p与buyer_id具有相同的实体,但它们的价值不同。它们将分别按活动和购买进行订购。感谢您的回复。我不明白你说的1的值是什么意思。另外,我对你回答的第二部分一无所知,你能解释一下吗?顺便说一下,我已经找到了您提供的第一个解决方案。我的主要目标是创建一个数据集,其中返回5列:Customer_a、Activity(top 100)、Customer_P、Purchase_P、Internal join of Activity和Purchase谢谢您的回复。顺便说一下,我已经找到了您提供的第一个解决方案。我的主要目标是创建一个数据集,其中返回5列:Customer_a、Activity(top 100)、Customer_P、Purchase(top 100)、Activity和Purchase的内部联接。我之所以有两个客户文化,是因为我想通过活动和购买进行订购,并找出它们之间的内在联系