【问题标题】:SQL count one field two times in select with different parametersSQL在不同参数的select中对一个字段计数两次
【发布时间】:2014-05-08 06:34:37
【问题描述】:

我喜欢让我的查询根据值在我的选择中计算一列两次。举个例子。

输入:表格

    id           | type
    -------------|-------------
    1            | 1
    2            | 1
    3            | 2
    4            | 2
    5            | 2


输出:查询(1 行,不是两行):
countfirst = 2(两次 1)
countsecond = 3(三乘以 2)

选择中的默认计数对查询中的所有行进行计数。但我喜欢基于行数 在一个数字上而不限制查询。例如,当使用 WHERE type = '1' 时,输入 2 被过滤掉了,不能再统计了。

这种情况在 SQL 中有解决方案吗?

--- 使用示例(上面的情况很简单,但大小写相同)---

通过一个查询,我可以从表中获取按类型分组的所有汽车。有两种类型的标志:黄色(在 db 1 中)和灰色(在 db 2 中)。所以在那个查询中我有以下输出:

雷诺 - 发现十次 - 两个黄色标志 - 八个灰色标志

【问题讨论】:

  • 请说明输入是什么以及预期的输出。你的描述有点混乱。
  • 我在问题中更改了一些内容。现在更清楚了吗?
  • 你只想数一下type列仪式??因为 1 是两次,2 是三次
  • 我在我的问题中发布了一个示例..

标签: sql sql-server-2008


【解决方案1】:

创建一个表,脚本如下。

CREATE TABLE [dbo].[temptbl](
[id] [int] NULL,
[type] [int] NULL
) ON [PRIMARY]

执行插入脚本为

insert into [temptbl] values(1,1)
insert into [temptbl] values(2,1)
insert into [temptbl] values(3,2)
insert into [temptbl] values(4,2)
insert into [temptbl] values(5,2)

然后执行查询。

;WITH cte as(
  SELECT [type], Count([type]) cnt 
  FROM temptbl 
  GROUP BY [type]
)
SELECT * FROM cte
pivot (Sum([cnt]) for [type] in ([1],[2])) as AvgIncomePerDay

【讨论】:

  • 感谢您的解决方案。此解决方案可以工作,但我们使用大型查询,并且使用此解决方案,我们需要将整个查询复制两次..
  • 感谢您的解决方案。这看起来是正确的解决方案。结果有一个小问题。 1 和 2 给出一个数字或一个空值。所以当 1 给出一个数字时,2 给出一个空值,反之亦然......我做错了吗?
  • 我明白你的意思。我修改了答案,请按步骤操作。
  • 如果类型不是无限的,您可以为 [type] 使用别名,例如当 [type] = 1 时 'firstcol' 当 [type] = 2 时 'secondcol' 以 [type] 结尾
  • 感谢您的评论。不幸的是,我无法在 SQL 服务器上创建或更改数据,因此测试有点困难。我有一个 MYSQL 数据库要测试,但我认为这个查询不能在 MYSQL 上运行,或者我弄错了..
【解决方案2】:

您可以按照 Mureinik 的建议使用 GROUP BY 子句,但要添加 WHERE 子句来过滤结果。

下面显示了 type = 1 的结果(假设 typeINT

 SELECT type, COUNT(*) AS NoOfRecords
   FROM table
  WHERE type IN (1)
  GROUP BY type

所以如果我们想要 1 和 2,我们可以使用:

 SELECT type, COUNT(*) AS NoOfRecords
   FROM table
  WHERE type IN (1, 2)
  GROUP BY type

最后,IN 语句可以从另一个查询中提取type

 SELECT type, COUNT(*) AS NoOfRecords
   FROM table
  WHERE type IN (SELECT type FROM someOtherTable)
  GROUP BY type

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    相关资源
    最近更新 更多