简体   繁体   English

如何结合两个MySQL查询

[英]How to Combine two mysql queries

I want to combine these two queries with two captain should be equal : 我想将这两个查询与两个队长结合起来应该相等:

select distinct(captain_name),sum(finaldiscount) as tot,payment_mode 
from   order_master 
where  payment_mode='card' 
group  by captain_name

select distinct(captain_name),sum(finaldiscount) as tot,payment_mode 
from   order_master 
where  payment_mode='cash' 
group  by captain_name

Combine can be a JOIN or an UNION 合并可以是JOINUNION

For JOIN : 对于JOIN

Select * 
from
(select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='card' group by captain_name ) t1
INNER JOIN
(select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='cash' group by captain_name) t2 on t1.capName = t2.capName

For UNION : 对于UNION

Select * 
    from
    (select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='card' group by captain_name ) t1
    UNION
    (select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='cash' group by captain_name) t2 

Try this: 尝试这个:

SELECT captain_name, 
       SUM(CASE WHEN payment_mode = 'cash' THEN finaldiscount ELSE 0 END) AS cashTotal, 
       SUM(CASE WHEN payment_mode = 'card' THEN finaldiscount ELSE 0 END) AS cardTotal
FROM order_master 
WHERE payment_mode IN ('cash', 'card') 
GROUP BY captain_name

OR 要么

SELECT captain_name, payment_mode, SUM(finaldiscount) total
FROM order_master 
WHERE payment_mode IN ('cash', 'card') 
GROUP BY captain_name, payment_mode

try this : 尝试这个 :

SELECT captain_name,
       Sum(finaldiscount) AS tot,
       payment_mode
FROM   order_master
WHERE  payment_mode IN( 'cash', 'card' )
       AND captain_name IN (SELECT captain_name
                            FROM   order_master
                            WHERE  payment_mode IN( 'cash', 'card' )
                            GROUP  BY captain_name
                            HAVING Count(DISTINCT payment_mode) = 2)
GROUP  BY captain_name,payment_mode 

the sub query will return only those captain_name which have both payment_mode ie card and cash . 子查询将仅返回同时具有payment_modecardcash captain_name then select rows of those captain_name and group by it by captain_name,payment_mode . 然后选择那些行captain_namegroup by它由captain_name,payment_mode

and if you don't want separate rows for card and cash then use this : 如果您不希望cardcash分开行,请使用以下命令:

SELECT captain_name,SUM(finaldiscount)
FROM   order_master
WHERE  payment_mode IN( 'cash', 'card' )
GROUP  BY captain_name
HAVING Count(DISTINCT payment_mode) = 2

Note : I assumed that two captain should be equal means only those captain which are returned by both queries, should be returned by combined query. 注意:我假设two captain should be equal意味着只有两个查询返回的那些队长,才应该由合并查询返回。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM