mariadb 获取在同一SELECT SQL查询中获得的列中所有类型的值的计数

fhg3lkii  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(106)

MySQL版本:5.7.36
我正在尝试最大限度地减少必须执行的查询数量。
现在,我正在执行一个类似于以下内容的查询:

SELECT
    TABLE 1.column1 as "A",
    TABLE 1.column2 as "B"

FROM 
    TABLE 1
WHERE 
    CONDITION

我可以从该查询中获得所需的结果,但我还希望获得在同一查询中显示的值类型的计数。
例如,如果以下查询检索此表

A   B
-   -
1   a
1   b
1   c
2   d
3   e
4   f
4   g

对于每一行,我还想获取检索到的列“A”与其值匹配的所有行的计数。
执行另一个查询来获得结果是否更有效,或者我是否可以修改我的获取查询来获得此统计信息?
预期结果:

A   B   C
-   -   -
1   a   3   # 3 rows with "1" in Column "A"
1   b   3
1   c   3
2   d   1
3   e   1
4   f   2
4   g   2

最新消息:
我能找到的最接近的查询如下:

SELECT
    TABLE 1.column1 as "A",
    COUNT(TABLE 1.column1)
FROM 
    TABLE 1
WHERE 
    TABLE 1.column1 = "foo"
GROUP BY
    TABLE 1.column1

结果是:

A   B   C
-   -   -
1   a   3
2   d   1
3   e   1
4   f   2

但是,它会删除列“A”中具有相同值的任何其他行。即使它在列“B”中具有不同的值。我希望所有行都出现在我的SQL查询中,并具有相应的行数。
我找到的下一个最接近的查询如下所示:

SELECT
    TABLE 1.column1 as "A",
    COUNT(TABLE 1.column1)
FROM 
    TABLE 1
WHERE 
    TABLE 1.column1 = "foo"
GROUP BY
    TABLE 1.column2

结果是:

A   B   C
-   -   -
1   a   1
1   b   1
1   c   1
2   d   1
3   e   1
4   f   1
4   g   1

这也没有达到预期的效果。

nkkqxpd9

nkkqxpd91#

您必须与获取计数的子查询连接。

SELECT t1.column1 AS A, t1.column2 AS B, t2.count
FROM Table1 AS t1
JOIN (
    SELECT column1 AS A, COUNT(*) AS count
    FROM Table1
    GROUP BY column1
) AS t2 ON t1.A = t2.A
tvokkenx

tvokkenx2#

SELECT
  c,
  COUNT(*) OVER (PARTITION BY c)
FROM t
ORDER BY c

相关问题