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



MySQL Version: 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&quot中具有相同值的任何其他行。即使它在列"B&quot中有不同的值。我想有所有行存在于我的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

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

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

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
SELECT
c,
COUNT(*) OVER (PARTITION BY c)
FROM t
ORDER BY c

相关内容

最新更新