当前位置: 首页 > 面试题库 >

SQL分组依据/计数:跨多个列计数相同的值吗?

莫繁
2023-03-14
问题内容

我试图弄清楚如何编写一个查询多个列中的值的查询,结果表在每个列中对 任何 列的每个可能值都有一个计数。

示例:说我有 mytable

Source data table:

P1  P2  P3
-----------
a   b   a
a   a   a
b   b   b
a   b   b

我想要一个查询,在每列中计算a和b,产生类似以下内容的结果:

Desired query output:

     P1  P2  P3
   -------------
a |  3   1   2
b |  1   3   2

我知道我可以通过 group by 轻松地对单个列执行此操作:

select P1, count(*) as mycounts
from mytable
group by P1

但是是否可以对 每一 列都执行此操作?

我正在使用SQL Server 2008(T-SQL)。在此先感谢您的帮助!


问题答案:

也许是这样的:

首先是一些测试数据:

DECLARE @tbl TABLE(P1 VARCHAR,P2 VARCHAR,P3 VARCHAR)

INSERT INTO @tbl
SELECT 'a','b','a' UNION ALL
SELECT 'a','a','a' UNION ALL
SELECT 'b','b','b' UNION ALL
SELECT 'a','b','b'

然后是一个像这样的枢轴:

SELECT
    *
FROM
(
    SELECT 'P1' AS P, P1 AS PValue,P1 AS test FROM @tbl
    UNION ALL
    SELECT 'P2',P2,P2 FROM @tbl
    UNION ALL
    SELECT 'P3',P3,P3 FROM @tbl
) AS p
PIVOT
(
    COUNT(PValue)
    FOR P IN ([P1],[P2],[P3])
) AS pvt

这是有关枢轴和非枢轴的更多信息



 类似资料:
  • 问题内容: 我有如下的SQL: 并得到结果: 我想总结每个部门的学生人数,如下所示: 我该如何编写sql? 问题答案: 尽管您似乎并未显示所有表格,但我只能假设还有每位学生的实际入学表格 如果您想要与每个学生相关联的每个部门的总数(这没有意义),则可能必须这样做… 我对“姓名”列的解释是学生的姓名,而不是班级实际讲师的姓名,因此,我进行子选择/加入。否则,就像其他人一样,只需要使用COUNT(*)

  • 我有以下代码。。。 } ...如果我想返回与WHERE条件匹配的行的总数,这样做很好。 但是,我只想计算这3列中具有不同/唯一数据组合的记录:C_URI、C_BYTE_START_NUM和C_NUM_BYTES。 我知道我可以做一些像。。。 ...但是我希望在这种情况下有更有效的方法来执行不同的计数?? 为了增加清晰度,如果我的表中有这些数据… C_URI |C_BYTE_START_NUM |C

  • 问题内容: 我正在尝试转换此查询(已经可以使用) 对于Linq to SQL,但我不知道自己在做什么错。看我的尝试 我只需要对建筑物进行分组并计算每个建筑物有多少用户。 问题答案: 只需使用以下方法:

  • 问题内容: 我已经写了这个并且在Oracle中成功执行了 我正在尝试在SQL Server中获得相同的结果(我们的源数据库使用Oracle,但我们的仓库使用SQL Server)。 我知道SQL Server 2008中的窗口函数不支持该功能-有人可以建议替代方法吗? 问题答案: 这是我最近遇到的。我从这篇文章中得到了它。到目前为止,它对我来说真的很好。

  • 问题内容: 我有一个看起来像这样的模型: 我想要为每个类别选择项目的计数(只是计数),因此在SQL中,它会像这样简单: 有没有相当于做这种“ Django方式”?还是纯SQL是唯一的选择?我熟悉Django中的count()方法,但是我看不出group by如何适合那里。 问题答案: 正如我刚刚发现的,这里是如何使用Django 1.1聚合API进行此操作:

  • 问题内容: 我试图在多列中计数,然后按总和将相同数据显示在任何列中 我希望它显示如下内容: 问题答案: 您可以使用联合查询