初学者SQL问题:具有多个COUNT(*)结果的算术

pol*_*nts 9 sql statistics count

继续使用Stack Exchange Data Explorer学习SQL的精神(参见:我们可以成为自己的"Northwind"用于教授SQL /数据库吗?),我决定尝试编写一个查询来回答一个简单的问题(在meta):什么%stackoverflow用户有超过10,000个代表?.

这就是我所做的:

查询#1

SELECT COUNT(*)
FROM Users
WHERE
  Users.Reputation >= 10000
Run Code Online (Sandbox Code Playgroud)

结果:

556
Run Code Online (Sandbox Code Playgroud)

查询#2

SELECT COUNT(*)
FROM
  USERS
Run Code Online (Sandbox Code Playgroud)

结果:

227691
Run Code Online (Sandbox Code Playgroud)

现在,我如何将它们组合成一个查询?这个查询成语叫什么?我需要写什么,所以我可以得到一个像这样的一行三列结果:

556     227691      0,00244190592
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 11

您可以使用公用表表达式(CTE):

WITH c1 AS (
    SELECT COUNT(*) AS cnt
    FROM Users
    WHERE Users.Reputation >= 10000
), c2 AS (
    SELECT COUNT(*) AS cnt
    FROM Users
)
SELECT c1.cnt, c2.cnt, CAST(c1.cnt AS FLOAT) / c2.cnt
FROM c1, c2
Run Code Online (Sandbox Code Playgroud)

  • 现在工作正常:) ... @polygenelubricants:现在你有三个工作版本可以玩!...这是最优雅的IMO查询,但请注意,某些数据库(如MySQL)不直接支持`WITH`子句(http://stackoverflow.com/questions/1382573/) (2认同)