You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计T-SQL查询中符合条件的不同(StateProvince, City)组合数量?

正确的T-SQL写法统计不同(StateProvince, City)组合数量

你的代码存在两个关键问题:

  • T-SQL 的 COUNT(DISTINCT) 不支持同时传入多个列作为参数
  • OVER(PARTITION BY ) 缺少分区字段,属于语法错误

根据不同需求,提供两种常用的正确写法:

场景1:仅获取符合条件的组合总数

如果只需要统计总共有多少个不同的(StateProvince, City)组合,可以先通过子查询/CTE获取去重后的结果,再统计行数:

SELECT COUNT(*) AS UniqueCombinationCount
FROM (
    SELECT DISTINCT StateProvince, City
    FROM adventureworks.SalesLT.Address
    WHERE CountryRegion = 'Canada' 
      AND StateProvince != 'Quebec'
) AS DistinctCombos

也可以用 GROUP BY 替代 DISTINCT,效果完全一致:

SELECT COUNT(*) AS UniqueCombinationCount
FROM (
    SELECT StateProvince, City
    FROM adventureworks.SalesLT.Address
    WHERE CountryRegion = 'Canada' 
      AND StateProvince != 'Quebec'
    GROUP BY StateProvince, City
) AS GroupedCombos

场景2:保留明细同时显示总数

如果需要在原有去重的(StateProvince, City)列表每行中,都显示总组合数量,可以结合窗口函数使用:

SELECT 
    StateProvince, 
    City,
    COUNT(*) OVER () AS TotalUniqueCombinations
FROM (
    SELECT DISTINCT StateProvince, City
    FROM adventureworks.SalesLT.Address
    WHERE CountryRegion = 'Canada' 
      AND StateProvince != 'Quebec'
) AS DistinctCombos
ORDER BY StateProvince, City

额外优化提示

原查询中使用 LIKE 'Canada' 可以改为 = 'Canada',因为没有通配符,= 的执行效率更高。

内容的提问来源于stack exchange,提问作者trung viet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:31:17