繁体   English   中英

使用 Group by 和 Join 进行查询的 COUNT 条件

COUNT with a condition for a query with Group by and Join

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

要求:

表格1:

Id      Key          SiteId ItemId    OrderNumber
1       ABCD           X      BTL        NULL
2       BCDE           X      BTL        ABCD
3       CDEF           X      DDD        BSFE

表 2:

Id  ItemId    Name
1    BTL      B Prd
2    DDD      D Prd

所需结果:

Id  ItemId      Name    AvailableKeys
1     BTL      B Prd      1
2     DDD      D Prd      0

可用密钥计算为表 1 中订单号为 null 的项目数

尝试的查询:

1) 
SELECT ps.ItemId, COUNT(ps.ItemId) AS AvailableKeys, item.Name
FROM TABLE1 AS ps 
LEFT JOIN TABLE2 as item ON item.ItemId = ps.ItemId 
WHERE ps.SiteId = 'X'
GROUP BY ps.ItemId, item.Name

   -- With this query, I am getting a count of the whole number of items but not the ones having order number as null (Count including even the Unavailable Items)

2) 
    SELECT ps.ItemId, COUNT(ps.ItemId) AS AvailableKeys, item.Name
    FROM TABLE1 AS ps 
    LEFT JOIN TABLE2 as item ON item.ItemId = ps.ItemId 
    WHERE ps.OrderNumber IS NULL AND ps.SiteId = 'X'
    GROUP BY ps.ItemId, item.Name

   -- With this query, I am missing the items having **ZERO** available keys

任何人都可以帮助我构建查询以从数据中获取所需的结果集。

提前致谢。

3 个回复

您需要一个条件总和,如下所示:

SUM(CASE WHEN OrderNumber IS NULL THEN 1 ELSE 0 END) AS AvailableKeys

以及完整的查询:

SELECT item.id, ps.ItemId
    , item.Name
    , SUM(CASE WHEN OrderNumber IS NULL THEN 1 ELSE 0 END) AS AvailableKeys
FROM TABLE1 AS ps 
LEFT JOIN TABLE2 as item ON item.ItemId = ps.ItemId 
WHERE ps.SiteId = 'X'
GROUP BY item.id, ps.ItemId, item.Name;

回报:

ID 项目 ID 项目名 可用键
1 BTL 湾区 1
2 DDD D 珠三角 0

顺便说一句:您也可以使用inner join ,除非您想包含表 2 中没有匹配项的情况。

尽管外部联接的顺序错误,但您已完成第一个查询。 只需在ON子句中为您想要在第二个表上的条件添加一个匹配项:

SELECT item.ItemId, COUNT(ps.ItemId) AS AvailableKeys, item.Name
FROM TABLE2 item LEFT JOIN
     TABLE1 ps
     ON item.ItemId = ps.ItemId AND 
        ps.SiteId = 'X' AND
        ps.OrderNumber IS NULL
GROUP BY item.ItemId, item.Name;
SELECT item.id, ps.ItemId, item.Name,
    SUM(IIF(OrderNumber IS NULL,1,0)) AS AvailableKeys
FROM 
    TABLE1 AS ps 
    LEFT JOIN TABLE2 AS item ON item.ItemId = ps.ItemId 
WHERE ps.SiteId = 'X'
GROUP BY item.id, ps.ItemId, item.Name;    
1 通过count()确实离开了join和group的Linq查询

如果我有一个具有多个条件的规则并且用户选择了多个条件,那么如何编写一个linq查询,为我提供所有规则,其中该规则中的每个条件都存在于用户选择的条件中? 这是我目前在SQL中的方式: 表 询问 对于linq查询,我将拥有这些对象(更多非规范化,但如果有帮助,我可以将它们 ...

2013-03-06 14:56:52 3 431   c#/ linq
2 使用JOIN,WHERE,GROUPBY,COUNT的SQL查询

下面是我正在使用的架构的示例。 如何返回所有具有权限但没有匹配的证书的用户的id和name ? 例如,查询将返回0,在这种情况下为john,因为john拥有“删除”权限,但没有匹配的“删除”证书。 (此架构是任意的和人为的,我只是想了解此查询的语法/选择逻辑) 我已经尝 ...

2015-07-10 14:29:48 2 52   mysql/ sql
3 如何使用DQL中的join和count编写此查询?

我正在查询一个名为Goal ( match_id , player_id , team_id )的表,该表返回每个球员得分的总进球数列表。 上面的查询为我提供了正确的信息,但是我很难将其转换为DQL。 我的尝试: } 在视图中(省略了控制器,但假定它在那里): ...

5 使用COUNT和JOIN查询所需的帮助

我在编写MYSQL查询时寻求帮助。 我有两个表,一个称为用户,另一个称为交换表。 users表具有以下结构: 和切换表: 交换表具有多个uid值,我希望生成一个具有以下输出的表: 其中,开关是指切换表中的出现次数。 有人可以指导我如何使用MySQL和PHP进行此操作 ...

6 使用JOIN时如何优化COUNT个子查询

我建立它用于生成一个索引页的查询Items基础上选定的Category ,由相对受欢迎程度排序计数的数目Likes和该项目已被添加到次数List在过去的24个小时。 查询的单个输入是主要类别ID。 这总共涉及4个表,其中一个表是一个嵌套集,因此它并不简单。 我通常非常擅长编写相当有效的 ...

7 需要帮助将条件COUNT()添加到已使用JOIN的查询中

这是我需要获取的内容: -有评论的帖子 -每个帖子的评论数 -每个帖子的未读评论数(由“评论”表中的“已读”一栏表示) 最后一部分是我遇到的麻烦。 到目前为止,这是我的SQL: 选择 posts.id ,posts.title ,COUNT(comme ...

8 外部查询和子查询中使用的COUNT和GROUP函数

我编写了一个查询,其中涉及创建汇总表和保存在单个表上的值的百分比(转储到一行)。 每个子查询在WHERE参数方面略有不同。 例如: 我现在想根据性别用COUNT(当然还有GROUP BY)细分每个子查询。 如果将性别的COUNT / GROUP BY放在外部查询中,则仅会获得“总学 ...

9 使用JOIN和GROUP的SQLite SELECT?

我正在尝试根据以下字符串的结果添加一列: 这个字符串给了我一个产品代码和销售数量。 根据产品代码,我需要添加的是产品代码的描述。 product_code和description列在同一个表中“products”数量在另一个表“receipts_items”中 谢谢!!! ...

10 MySQL 用 JOIN + GROUP + 外键构造查询

我有一个工资表,如下图所示。 员工编号emp_no是外键。 以下查询工作正常: 但是,如果我尝试按工资 DESC 排序,则会引发以下错误: 错误代码:1055。ORDER BY 子句的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“em ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM