SQL使用同一字段两次使用不同的条件
我有一个计数的标题(凭单信用。凭单id),我已经在使用WHERE语句将其添加到我的报告中,但我想使用不同的条件将其再次添加为另一列,我如何才能做到这一点SQL使用同一字段两次使用不同的条件,sql,Sql,我有一个计数的标题(凭单信用。凭单id),我已经在使用WHERE语句将其添加到我的报告中,但我想使用不同的条件将其再次添加为另一列,我如何才能做到这一点 SELECT vouchers.code, vouchers.credit, count(voucher_credits.voucher_id) as Activated FROM vouchers, voucher_credits, users WHERE vouchers.id = voucher_credits.voucher_id
SELECT vouchers.code, vouchers.credit, count(voucher_credits.voucher_id) as Activated
FROM vouchers, voucher_credits, users
WHERE vouchers.id = voucher_credits.voucher_id
AND voucher_credits.remaining_credit = 0
AND users.id = voucher_credits.user_id AND users.state = 'active'
AND vouchers.is_customer_service = FALSE
GROUP by vouchers.code, vouchers.credit
ORDER by count(voucher_credits.voucher_id) DESC
LIMIT 100
第二列将是users.state='cancelled',不带剩余的_credit=0Try UNION ALL:
SELECT vouchers.code, vouchers.credit, count(voucher_credits.voucher_id) as Activated
FROM vouchers, voucher_credits, users
WHERE vouchers.id = voucher_credits.voucher_id
AND voucher_credits.remaining_credit = 0
AND users.id = voucher_credits.user_id AND users.state = 'active'
AND vouchers.is_customer_service = FALSE
GROUP by vouchers.code, vouchers.credit
ORDER by count(voucher_credits.voucher_id) DESC
UNION ALL
SELECT vouchers.code, vouchers.credit, count(voucher_credits.voucher_id) as Activated
FROM vouchers, voucher_credits, users
WHERE vouchers.id = voucher_credits.voucher_id
AND users.state = 'cancelled'
AND users.id = voucher_credits.user_id AND users.state = 'active'
AND vouchers.is_customer_service = FALSE
GROUP by vouchers.code, vouchers.credit
ORDER by count(voucher_credits.voucher_id) DESC
如果所有数据都来自同一行,则可以使用“条件和”计数,这基本上就是根据表达式添加0或1:
SELECT ...,
SUM(CASE WHEN voucher_credits.remaining_credit = 0 AND users.state = 'active'
THEN 1 ELSE 0 END) Activated,
SUM(CASE WHEN users.state = 'cancelled' THEN 1 ELSE 0 END) CanceledUser,
FROM ...
...
使用您的查询,这将是:
SELECT vouchers.code, vouchers.credit,
SUM(CASE WHEN voucher_credits.remaining_credit = 0 AND users.state = 'active'
THEN 1 ELSE 0 END) Activated,
SUM(CASE WHEN users.state = 'cancelled' THEN 1 ELSE 0 END) CanceledUser,
FROM vouchers
INNER JOIN voucher_credits ON vouchers.id = voucher_credits.voucher_id
INNER JOIN users ON users.id = voucher_credits.user_id
WHERE vouchers.is_customer_service = FALSE
GROUP by vouchers.code, vouchers.credit
ORDER by Activated DESC
LIMIT 100
你可以加入这张桌子两次。我使用了
FULL-OUTER-JOIN
,以防从两个子查询中获得不同的记录。请随意更改联接类型
select t1.code, t1.credit, t1.Activated, t2.code, t2.credit, t2.Cancelled
from
(SELECT vouchers.code, vouchers.credit, count(voucher_credits.voucher_id) as Activated
FROM vouchers, voucher_credits, users
WHERE vouchers.id = voucher_credits.voucher_id
AND voucher_credits.remaining_credit = 0
AND users.id = voucher_credits.user_id AND users.state = 'active'
AND vouchers.is_customer_service = FALSE
GROUP by vouchers.code, vouchers.credit) t1
FULL OUTER JOIN
(SELECT vouchers.code, vouchers.credit, count(voucher_credits.voucher_id) as Cancelled
FROM vouchers, voucher_credits, users
WHERE vouchers.id = voucher_credits.voucher_id
AND users.state = 'cancelled'
AND users.id = voucher_credits.user_id AND users.state = 'active'
AND vouchers.is_customer_service = FALSE
GROUP by vouchers.code, vouchers.credit) t2
ON t1.code = t2.code and t1.credit = t2.credit