获取在同一 SELECT SQL 查询中获得的列中所有类型值的计数
Get count of all types of values in a column obtained in the same SELECT SQL query
MySQL版本:5.7.36
我正在尝试尽量减少必须执行的查询数量。
现在,我正在执行与此类似的查询:
SELECT
TABLE 1.column1 as "A",
TABLE 1.column2 as "B"
FROM
TABLE 1
WHERE
CONDITION
我可以从此查询中获得我需要的结果,但是我还想获得在同一查询中显示的值类型的计数。
例如,如果以下查询检索此 table
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
这也没有达到预期的结果。
您必须加入获取计数的子查询。
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
MySQL版本:5.7.36
我正在尝试尽量减少必须执行的查询数量。
现在,我正在执行与此类似的查询:
SELECT
TABLE 1.column1 as "A",
TABLE 1.column2 as "B"
FROM
TABLE 1
WHERE
CONDITION
我可以从此查询中获得我需要的结果,但是我还想获得在同一查询中显示的值类型的计数。
例如,如果以下查询检索此 table
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
这也没有达到预期的结果。
您必须加入获取计数的子查询。
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