【问题标题】:SQL : Query with multiple COUNT() and Specific ConditionsSQL:使用多个 COUNT() 和特定条件进行查询
【发布时间】:2022-12-13 17:55:34
【问题描述】:

我是 SQL 的新手,我一直在尝试查询一个表,在该表中我需要多个具有特定条件的 COUNT(),它们是:

  • 名称列中的唯一名称
  • 基于日期
  • 基于组

这是表格的示例:

+-------+-------+------------+
| Group | Name  | Dates      |
+-------+-------+------------+
| GR1   | Name1 | 2022-01-01 |
+-------+-------+------------+
| GR1   | Name1 | 2022-01-01 |
+-------+-------+------------+
| GR1   | Name2 | 2022-02-01 |
+-------+-------+------------+
| GR1   | Name3 | 2022-02-01 |
+-------+-------+------------+
| GR2   | Name4 | 2022-01-01 |
+-------+-------+------------+
| GR2   | Name5 | 2022-03-01 |
+-------+-------+------------+
| GR2   | Name5 | 2022-03-01 |
+-------+-------+------------+
| GR2   | Name6 | 2022-04-01 |
+-------+-------+------------+
| GR2   | Name7 | 2022-04-01 |
+-------+-------+------------+

这是我根据示例尝试实现的目标:

+------------+-----+-----+
| Month      | GR1 | GR2 |
+------------+-----+-----+
| 2022-01-01 | 1   | 1   |
+------------+-----+-----+
| 2022-02-01 | 2   | 0   |
+------------+-----+-----+
| 2022-03-01 | 0   | 1   |
+------------+-----+-----+
| 2022-04-01 | 0   | 2   |
+------------+-----+-----+

这是我到目前为止的查询:

SELECT DISTINCT Dates AS Month,
(SELECT COUNT(DISTINCT Name) FROM `table` WHERE Group LIKE '%GR1%') AS GR1,
(SELECT COUNT(DISTINCT Name) FROM `table` WHERE Group LIKE '%GR2%') AS GR2 
FROM `table`
ORDER BY Month

我得到了我期望的结果,我得到了不同名称的数量,但没有通过日期过滤。

结果:

+------------+-----+-----+
| DATE       | GR1 | GR2 |
+------------+-----+-----+
| 2022-01-01 | 3   | 4   |
+------------+-----+-----+
| 2022-02-01 | 3   | 4   |
+------------+-----+-----+
| 2022-03-01 | 3   | 4   |
+------------+-----+-----+
| 2022-04-01 | 3   | 4   |
+------------+-----+-----+

我一直在努力为日期创造条件,同时为团体保持条件

提前感谢您提供的任何提示或答案! 祝你有美好的一天!

【问题讨论】:

    标签: sql


    【解决方案1】:

    而不是选择清楚的您需要按日期聚合的行并使用条件聚合计算您的组名。

    您的查询尝试执行的操作将不起作用,因为每个子查询正在查看所有行,你不是关联在日期范围内。

    尝试以下操作:

    select dates as "Month", 
        Count(distinct case when "group" = 'GR1' then Name end) GR1,
        Count(distinct case when "group" = 'GR2' then Name end) GR2
    from t
    group by dates;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多