sql - 按查询挑战分组

标签 sql mysql

我有这些表:

customer
--------
customer_id int
name        varchar(255)

order
-----
order_id    int
customer_id int
discount    boolean

我可以通过如下查询获取每个客户的订单数量:

select c.id, count(o.order_id)
from customer c 
left join order as o using c.customer_id = o.customer_id
group by 1

或者,我可以通过以下方式获取每个客户的打折订单数量:

select c.id, count(o.order_id)
from customer c 
left join order as o using c.customer_id = o.customer_id and o.discount = true
group by 1

但我想不出一种在单个查询中同时获得两者的方法。我尝试了以下方法:

select c.id, count(o.order_id), count(o2.order_id)
from customer c 
left join order as o using c.customer_id = o.customer_id
left join order as o2 using c.customer_id = o2.customer_id and o2.discount = true
group by 1

但是没有用。是否可以在单个 (MySql) 查询中计算两者?

干杯, 唐

最佳答案

怎么样

select c.id, count(o.order_id),sum(if(o.discount,1,0))
from customer c 
left join order as o using c.customer_id = o.customer_id
group by c.id

关于sql - 按查询挑战分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/429136/

相关文章:

sql - 从sql中的字符串中提取最大值

mysql - 在 MySql Workbench 中插入日期

php - 图片点击创建一个特定的 php 查询但不返回正确的结果

php - MySQL问题: The right way to calculate some data from different tables

sql - 将不相关的查询合并到一个查询中以生成计数

sql - 将 UNION 与 Sequel 结合使用

java - 准备好的语句作为sql参数

java - 部署时 servlet 上下文监听器中的(批量)数据库架构

以编程方式编辑 DataGridView 后,C# 更新 MySql

php - 多个查询字符串中的 SQL MAX()