我有这个查询,它返回10行:
SELECT
substring(testcase_name, 4, len(testcase_name))
FROM
TEST_RESULTS
WHERE
test_run_id = 48
GROUP BY
substring(testcase_name,4,len(testcase_name))
我需要计算这些行(需要返回数字 - 在本例中为10)。我需要
SELECT count(*) FROM (my query)
但在SQL Server中,这不起作用。我在互联网上搜索过,我尝试过SELECT count(\*) FROM (my query) t
..我将返回的表命名为#34; t" ..但仍然不适合我...
错误信息是:
没有为第1列' t'。
指定列名
也许问题可能是我用子串修改数据?
答案 0 :(得分:1)
您需要在表达式中添加别名:
SELECT COUNT(*)
FROM (SELECT substring(testcase_name,4,len(testcase_name))
FROM TEST_RESULTS
WHERE test_run_id = 48
GROUP BY substring(testcase_name,4,len(testcase_name))
) t(s); -- adding column alias
答案 1 :(得分:0)
其他答案将为您提供分组记录的计数。你可能需要的是每组计数,你可以这样做:
WITH cte AS
(
SELECT substring(testcase_name,4,len(testcase_name)) AS x
FROM TEST_RESULTS
WHERE test_run_id = 48
)
SELECT x, COUNT(*) AS CountPerX
FROM cte
GROUP BY x;
x CountPerX
--------------
Foo 123
Bar 234
另一种返回“群组数量”(原始问题)的方法是通过COUNT DISTINCT
SELECT COUNT(DISTINCT substring(testcase_name,4,len(testcase_name))) AS CountGroups
FROM TEST_RESULTS
WHERE test_run_id = 48;
答案 2 :(得分:0)
这也是使用COUNT DISTINCT
的机会,例如:
SELECT COUNT(distinct substring(testcase_name,4,len(testcase_name)))
FROM TEST_RESULTS
WHERE test_run_id = 48;
另请注意,在此表单中,您不再需要分组。