sql - 如何计算sql中where语句中的行数?
问题描述
我在 SQL Server 中有两个表:
order
(列:order_id
,payment_id
)payment
(列:payment_id
,is_pay
)
我想获得具有另外两个属性的所有订单:
1有多少行
is_pay
:where payment_id = <...> payment.is_pay = 1
以及行数(没有第一个过滤器)
select count(*) from payment where payment_id = <...>
所以我写了这个查询:
select
*,
(select count(1) from payment p
where p.payment_id = o.payment_id and p.is_pay = 1) as total
from
order o
问题是如何计算没有is_pay
= 1 的行?
我的意思是“许多中的一些”
解决方案
首先聚合payment
然后加入order
:
SELECT o.*, p.total_pay, p.total
FROM [order] o
LEFT JOIN (
SELECT payment_id, SUM(is_pay) total_pay, COUNT(*) total
FROM payment
GROUP BY payment_id
) p ON p.payment_id = o.payment_id;
如果所有订单至少有 1 笔付款,则更LEFT
改为加入。
此外,如果的数据类型为,则更改为:INNER
is_pay
BIT
SUM(is_pay)
SUM(CASE WHEN is_pay = 1 THEN 1 ELSE 0 END)
推荐阅读
- jenkins - jenkins 多分支管道作业的 webhook
- jquery - 如何对齐jstree网格列数据“右”或“左”?
- javascript - 从不同的存储库设置 PATH 参数
- reactjs - 函数作为 React 子级无效。如果您返回 Component 而不是
从渲染 - c# - 从 C# 中的对象列表中获取 JSON 文件
- storage - 使用 MPIO 时的 SCSI 3 持久保留
- python - 如何在 Python 中合并两条更接近的非直线(非平行)线?
- linux - 在不引导操作系统的 GUI 的情况下在 Linux 中制作 GUI
- shell - 如何对 uniq -c 返回的值进行算术运算?
- jsf - JSF SelectOneMenu 在没有转换器的情况下无法工作?