簡體   English   中英

如何結合兩個MySQL查詢

[英]How to Combine two mysql queries

我想將這兩個查詢與兩個隊長結合起來應該相等:

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

合並可以是JOINUNION

對於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

對於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 

嘗試這個:

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

要么

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

嘗試這個 :

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 

子查詢將僅返回同時具有payment_modecardcash captain_name 然后選擇那些行captain_namegroup by它由captain_name,payment_mode

如果您不希望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

注意:我假設two captain should be equal意味着只有兩個查詢返回的那些隊長,才應該由合並查詢返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM