MySQL联合声明

MySQL联合声明,mysql,Mysql,我只想问一下如何将两个查询和 区别在于where语句。一个是带有的,其中c.transac_type=0,另一个是的,其中c.transac_type=1“ 我想在c.transac_type=0和c.transac_type=1的条件下看到SUM(c.amount)的输出,因为它们有不同的SUM(c.amount)输出 联合它将相当简单,但不确定它是否会给您提供有用的值 SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.cate

我只想问一下如何将两个查询和 区别在于where语句。一个是带有
的,其中c.transac_type=0
,另一个是
的,其中c.transac_type=1“


我想在c.transac_type=0和c.transac_type=1的条件下看到SUM(c.amount)的输出,因为它们有不同的SUM(c.amount)输出


联合它将相当简单,但不确定它是否会给您提供有用的值

SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission 
FROM control_panel_client_create AS a
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
    WHERE c.transac_type = 0 
GROUP BY d.category, b.branch_code_id 
UNION
SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission 
FROM control_panel_client_create AS a
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
    WHERE c.transac_type = 1 
GROUP BY d.category, b.branch_code_id 
ORDER BY AmountSum DESC
你可以得到两种transac类型的总和

SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission 
FROM control_panel_client_create AS a
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
    WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id 
ORDER BY AmountSum DESC
或者分别计算两者的总和

SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission , c.transac_type
FROM control_panel_client_create AS a
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
    WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id, c.transac_type
ORDER BY AmountSum DESC
将两个计数放在同一行的糟糕方式:-

SELECT a.id, a.branch_code, SUM(IF(c.transac_type=0,c.amount, 0)) AS AmountSumTransac_0, SUM(IF(c.transac_type=1, c.amount, 0)) AS AmountSumTransac_1, d.category, e.branch_commission 
FROM control_panel_client_create AS a
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
    WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id
ORDER BY AmountSum DESC
您可以在(0,1)中使用
,而不是联合

试试这个

    SELECT a.id, a.branch_code, SUM(c.amount), d.category, e.branch_commission 
FROM control_panel_client_create AS a
RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
WHERE c.transac_type IN (0, 1)
GROUP BY d.category, b.branch_code_id,c.transac_type  ORDER BY SUM(c.amount) DESC

如果要在两个不同的列中计算事务类型的总和,则需要使用条件聚合:

SELECT a.id, a.branch_code, SUM(c.amount) as totAmount,
       sum(case when c.transac_type = 0 then c.amount end) as Trans0_Amount,
       sum(case when c.transac_type = 1 then c.amount end) as Trans1_Amount,
       d.category, e.branch_commission 
FROM control_panel_client_create AS a
RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
WHERE c.transac_type IN (0, 1)
GROUP BY d.category, b.branch_code_id
ORDER BY SUM(c.amount) DESC

为什么不
c.transac_键入(0,1)
而不是
UNION
?mysqli在这里是一个错误的标签仅供参考,“[mysql]和“right join”这两个术语目前出现了952次。与之相比,“[mysql]和“left join”出现了22935次……我只是说。我想看看SUM(c.amount)的输出在c.transac_type=0和c.transac_type=1的情况下,因为它们的总和(c.amount)输出不同,然后通过检查我的更新答案在组中添加
c.transac_type
,我是否可以将c.transac_type=0的总和(c.amount)列和另一个总和(c.amount)列分开对于c.transac_type=1的情况,它将按c.transac_type分组,然后它将是每个类型的不同总和。如果您没有得到结果,请将
c.transac_type
移动到组中的第一位by我想查看总和(c.amount)的输出在c.transac_type=0和c.transac_type=1的情况下,因为它们的SUM(c.amount)输出不同——最后一个查询应该这样做(将c.transac_type添加到GROUP BY中,并将其检查改为in)。是否可以为SUM(c.amount)分隔一列对于c.transac_type=0,对于c.transac_type=1,另一列是SUM(c.amount)。这可能会以一种糟糕的方式完成(将添加代码来回答这个问题)OMG!这正是我需要的。感谢您的帮助。已经在使用它了:)并且工作非常完美:)
SELECT a.id, a.branch_code, SUM(c.amount) as totAmount,
       sum(case when c.transac_type = 0 then c.amount end) as Trans0_Amount,
       sum(case when c.transac_type = 1 then c.amount end) as Trans1_Amount,
       d.category, e.branch_commission 
FROM control_panel_client_create AS a
RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id
INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id
WHERE c.transac_type IN (0, 1)
GROUP BY d.category, b.branch_code_id
ORDER BY SUM(c.amount) DESC