【问题标题】:SELECT COUNT(*) based on joined table conditions基于连接表条件的 SELECT COUNT(*)
【发布时间】:2019-01-04 20:29:02
【问题描述】:

我正在尝试编写一个与教育系统相关的查询,该系统根据 11 月对特定学校进行的以下检查类型返回数值,但我不太明白该怎么做。

我需要返回 11 月因不合规而被引用的组织列表,然后返回导致被引用的当月访问次数类型。我需要根据每个提供者对 insp.Type_of_Visit__c 条件中的每种类型进行计数,但如果他们被发出多个不合规项,则不需要对不同的提供者进行计数。

我需要将每种类型的访问设为单独的列。

到目前为止,我的内联子查询返回未过滤的结果:

SELECT ...
, (SELECT COUNT(*) FROM Inspection__c WHERE Type_of_Visit__c = 'Pre-Licensing') AS [Number of PreLicensing Statement of Non-Compliance issue date]

这不会过滤我已有的 WHERE 子句。

此外,除非有更好的方法,否则我需要为每种类型的访问重复该行。

老实说,我只是对如何正确执行此操作一无所知。

SELECT  a.Provider_Number__c AS [Provider ID]
, a.Provider_No__c AS [Legacy System Number]
, a.License_Status__c AS [License Status]
, a.Record_Type_Name__c AS [Record Type Name]
, a.Provider_Status__c AS [Provider Status]
, a.License_Type__c AS [License Type]
, a.Name AS [Name]
, a.Provider_Address_1__c AS [Street Address 1]
, a.Provider_Address_2__c AS [Street Address 2]
, a.Provider_city_text__c AS City
, a.Provider_Zip_Code__c AS [Zip Code]
, a.Phone
, a.Provider_Email__c AS Email
, a.Capacity__c AS [Licensed Capacity]
, insp.Date_of_Visit__c AS [Visit Date]
, inv.Statement_of_non_compliance_Issue_Date__c AS [Statement of Non-Compliance Issued Date]
    , (SELECT COUNT(*) FROM Inspection__c WHERE Type_of_Visit__c = 'Pre-Licensing') AS [Number of PreLicensing Statement of Non-Compliance issue date]

  FROM Inspection__c insp
  JOIN Account a ON a.Id = insp.Provider_No__c
  JOIN Investigation__c inv ON inv.Provider_Id__c = a.Id
  WHERE (insp.Date_of_Visit__c BETWEEN '2018-11-01' AND '2018-11-30')
  AND (a.Record_Type_Name__c = 'Large Group' OR a.Record_Type_Name__c = 'Small Group')
  AND insp.Type_of_Visit__c IN ('Pre-Licensing',
    'Provisional License 90-day Monitoring',
    'Provisional License Renewal',
    'Renewal-Monitoring',
    'Renewal-Full Review',
    'Monitoring',
    'Enhanced Monitoring',
    'Capacity Increase',
    'Change of Location',
    'Change of Space',
    'Follow-up',
    'Monitoring outside differential Licensing Cycle',
    'License Upgrade',
    'Re-Activate Provider',
    'Technical Assistance',
    'Progress',
    'Renewal-Enhanced Monitoring')

我需要计算每个提供者的每种访问类型并将值返回到表中。如果有更好的方法,它不一定是 COUNT 函数。

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 您是否希望每个计数(typeofvisit)或每个 typeofvisit 的列成为单独的行?
  • 单独的列。感谢您的评论,编辑了问题以反映这一点。

标签: mysql sql select count ssms


【解决方案1】:

我不会输入你所有的字符串,但我会告诉你怎么做。

假设您的查询如下所示:

SELECT A,B,C
FROM T
WHERE Z in ('x','y','z')

其中 T 有索引 index1(在你的情况下 index1 可能是 Provider_ID)

那么你就可以这样做了

SELECT A,B,C, G1.x_count, G1.y_count, G1.z_count
FROM T
JOIN (
  SELECT index1,
    SUM(CASE WHEN Z = 'x' THEN 1 ELSE 0 END) AS x_COUNT,
    SUM(CASE WHEN Z = 'y' THEN 1 ELSE 0 END) AS y_COUNT,
    SUM(CASE WHEN Z = 'z' THEN 1 ELSE 0 END) AS z_COUNT
  FROM T
  WHERE Z in ('x','y','z')
  GROUP BY index1
) G1 on T.index1 = G1.index1

所以现在您有了每个索引 1 的 x、y、z 的计数

【讨论】:

    【解决方案2】:

    如果你使用的是MySql 8,你可以使用

    COUNT(*) OVER (PARTITION BY Type_of_Visit)
    

    可能会解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 2021-02-22
      • 2013-11-12
      • 2019-03-22
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多