mysql - 使用连接信息计数

标签 mysql sql join count

我有两个表。

一张表记录了订单库存,有FK_stockFK_orderNo

我想统计每个库存商品的订单数量。以下代码可以正确地执行此操作:

(1)
    SELECT orderstock.FK_orderNo, Count(orderstock.FK_stock) AS CountOfFK_stock
     FROM stock INNER JOIN orderstock ON stock.StockID = orderstock.FK_stock 
    GROUP BY orderdemo.FK_orderNo 

但是,我想补充一点,只列出不易腐烂的库存元素 (stock.perishable=0)。所以像

SELECT orderstock.FK_orderNo, Count(orderstock.FK_stock) AS CountOfFK_stock 
FROM stock INNER JOIN orderstock ON stock.stockID = orderstock.FK_stock 
WHERE stock.perishable=0 
GROUP BY orderstock.FK_orderNo 

我如何访问与 FK_stock 相关的信息来完成这项工作?为此,当我尝试合并库存表中的信息时,每项库存都单独计算。

(1) 的结果

 FK_OrderNo     CountOfFK_Stock     
 9      10
104     8
105     3
106     10
107     8
108     10
109     11
110     9

期望的结果(类似的东西):

 FK_OrderNo     CountOfFK_Stock     
 9      7
104     8
105     3
106     4
107     7
108     2
109     11
110     6 

最佳答案

我猜你正在寻找条件计数

where 子句过滤器移动到 Count Aggregate 并使计数聚合仅在 stock.perishable = 0 时计算记录。

SELECT orderdemo.fk_orderno, 
       Count(CASE 
               WHEN stock.perishable = 0 THEN 1 
             END) AS nonperishable_count 
FROM   stock 
       INNER JOIN orderdemo 
               ON stock.studentid = orderdemo.fk_stock 
GROUP  BY orderdemo.fk_orderno 

Count 聚合也可以替换为 SUM 聚合。像这样

   Sum(CASE 
         WHEN stock.perishable = 0 THEN 1 
         ELSE 0 
       END) AS nonperishable_count 

关于mysql - 使用连接信息计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34397237/

相关文章:

java - 在 jooQ 中使用 Left Join 自定义 POJO

sql - PostgreSQL 通配符 LIKE 用于子查询返回的任何单词列表

sql - 捕获连接表达式中的所有记录

mysql - 是否可以组合这些 SQL select 语句?

mysql - 由于在 MySQL 中使用保留字作为表名或列名而导致的语法错误

php - 使用共享内存从 PHP 应用程序连接到 MySQL 数据库时出现问题

phpMyAdmin:密码?

java - Hibernate MS SQL 连接

sql - 类中 SQL 的 F# 类型提供程序

mysql - SQL - 根据另一个表中指定的条件限制来自一个表的结果