从 Mysql SELECT 查询问题中过滤空行
Filtering empty rows from Mysql SELECT query issue
我有一个 SELECT 查询如下:
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
ORDER BY basket_id desc
这个查询给我这样的输出:
+-----------+-------------------+
| basket_id | due_balance |
+-----------+-------------------+
| 16 | 999.50 |
| 15 | 0.00 |
| 13 | 0.00 |
| 11 | 1716.00 |
| 9 | 1210.00 |
| 7 | 140.00 |
+-----------+-------------------+
我的问题是,如何从 due_balance
中筛选出 0 条到期记录并修改查询以获取其余记录?
预期结果应该是:
+-----------+-------------------+
| basket_id | due_balance |
+-----------+-------------------+
| 16 | 999.50 |
| 11 | 1716.00 |
| 9 | 1210.00 |
| 7 | 140.00 |
+-----------+-------------------+
我试过这种方法,但对我不起作用。
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4 AND due_balance > 0
GROUP BY customer_id, basket_id
ORDER BY basket_id desc
尝试使用 <> 0。应该可行。
到期余额的非零断言属于 HAVING
子句:
SELECT basket_id,
b.amount_due - SUM(p.amount_paid) AS due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
HAVING due_balance > 0
ORDER BY basket_id DESC;
使用 HAVING 子句或使用子查询然后在 WHERE 子句外添加条件。
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
Having due_balance > 0
ORDER BY basket_id desc
SELECT t.basket_id
, t.due_balance
FROM (SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id) t
WHERE t.due_balance > 0
ORDER BY t.basket_id desc
你需要使用 having
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
Having due_balance > 0
ORDER BY basket_id desc
我有一个 SELECT 查询如下:
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
ORDER BY basket_id desc
这个查询给我这样的输出:
+-----------+-------------------+
| basket_id | due_balance |
+-----------+-------------------+
| 16 | 999.50 |
| 15 | 0.00 |
| 13 | 0.00 |
| 11 | 1716.00 |
| 9 | 1210.00 |
| 7 | 140.00 |
+-----------+-------------------+
我的问题是,如何从 due_balance
中筛选出 0 条到期记录并修改查询以获取其余记录?
预期结果应该是:
+-----------+-------------------+
| basket_id | due_balance |
+-----------+-------------------+
| 16 | 999.50 |
| 11 | 1716.00 |
| 9 | 1210.00 |
| 7 | 140.00 |
+-----------+-------------------+
我试过这种方法,但对我不起作用。
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4 AND due_balance > 0
GROUP BY customer_id, basket_id
ORDER BY basket_id desc
尝试使用 <> 0。应该可行。
到期余额的非零断言属于 HAVING
子句:
SELECT basket_id,
b.amount_due - SUM(p.amount_paid) AS due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
HAVING due_balance > 0
ORDER BY basket_id DESC;
使用 HAVING 子句或使用子查询然后在 WHERE 子句外添加条件。
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
Having due_balance > 0
ORDER BY basket_id desc
SELECT t.basket_id
, t.due_balance
FROM (SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id) t
WHERE t.due_balance > 0
ORDER BY t.basket_id desc
你需要使用 having
SELECT basket_id
, b.amount_due - SUM(p.amount_paid) as due_balance
FROM basket_due b
LEFT JOIN basket_payment p USING (basket_id)
WHERE b.customer_id = 4
GROUP BY customer_id, basket_id
Having due_balance > 0
ORDER BY basket_id desc