【问题标题】:Select distinct of rows and show count of each value选择不同的行并显示每个值的计数
【发布时间】:2016-07-08 08:10:29
【问题描述】:

我正在尝试选择 [AssetManager].[AssetType] 的不同选项,并计算从表 [AssetManager].[Asset] 中引用资产类型的 ID 的次数。请参阅下面的示例:

+-----------+-------------+
| Type Name | Asset Count |
+-----------+-------------+
| Phone     |           5 |
| Desktop   |          12 |
| Laptop    |          22 |
+-----------+-------------+

但是,我正在尝试的查询根本不起作用,我所能做的最远的事情是选择带有类型名称内部连接的资产标题(我不擅长 SQL...)。请参阅下面的我当前的查询:

SELECT
[Asset].[Title] AssetTitle,
[AssetType].[Title] TypeTitle
FROM
[AssetManager].[Asset]
INNER JOIN
[AssetManager].[AssetType]
ON
[Asset].[AssetType_Id] = [AssetType].[Id]

【问题讨论】:

  • 你试过GROUP BY吗?
  • @IvanStarostin 是的,它抱怨它不是一个聚合函数
  • 将您的代码添加到显示给您的问题和错误消息中。

标签: sql sql-server select sql-server-2014


【解决方案1】:

正如 cmets 所说,您需要做的就是正确添加 GROUP BY

SELECT
    [AssetType].[Title] TypeTitle
    , COUNT(*) [Asset Count]
FROM [AssetManager].[Asset]
     INNER JOIN [AssetManager].[AssetType]
        ON [Asset].[AssetType_Id] = [AssetType].[Id]
GROUP BY [AssetType].[Title]

【讨论】:

    【解决方案2】:

    使用OUTER APPLY[AssetManager].[Asset] 表中获取引用计数

    SELECT
       DISTINCT [AssetType].[Title] TypeTitle,
       M.TypeCount
    FROM
    [AssetManager].[AssetType]
    OUTER APPLY(
      SELECT COUNT([Asset].[AssetType_Id]) AS TypeCount
      FROM [AssetManager].[Asset]
      WHERE [Asset].[AssetType_Id] = [AssetType].[Id]
    )M
    

    【讨论】:

    • 谢谢,两者都有效,但奇怪的是,Radu 的回答似乎比这更快。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2017-05-23
    • 1970-01-01
    • 2018-05-28
    • 2012-07-28
    • 2017-07-05
    • 2021-09-29
    相关资源
    最近更新 更多