[英]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 合并可以是JOIN或UNION
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_mode
即card
和cash
captain_name
。 then select rows of those captain_name
and group by
it by captain_name,payment_mode
. 然后选择那些行
captain_name
和group by
它由captain_name,payment_mode
。
and if you don't want separate rows for card
and cash
then use this : 如果您不希望
card
和cash
分开行,请使用以下命令:
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.