【问题标题】:How to use COUNT, Group by and BETWEEN in the same Query?如何在同一个查询中使用 COUNT、Group by 和 BETWEEN?
【发布时间】:2019-08-16 05:49:00
【问题描述】:

我正在用 C# 编写一个程序来生成报告。只有一个名为“Records”的表,它包含 3 列“ID、Date、Name”。

我想要做的是在一个日期范围内计算 ID 的数量并按名称对它们进行分组。

SELECT COUNT(ID), Name FROM Records GROUP BY Name ORDER BY COUNT(ID) DESC;

SELECT * FROM Records WHERE Date BETWEEN '" +Start_Date+ "' AND '" +End_Date+ "';

我分别尝试了这些代码。他们正在工作。第一个计算ID,第二个显示两个日期之间的所有记录。但我想将它们组合成一个命令。

所以我写了这段代码。

SELECT COUNT(ID), Name,Date FROM Records 
GROUP BY Name ORDER BY COUNT(ID) DESC 
WHERE Date BETWEEN '" +Start_Date+ "' AND '" +End_Date+ "';

但它给了我错误“关键字'WHERE'附近的语法不正确”。 有人可以帮我处理这段代码吗?我做错了什么?

*注意:我不擅长 SQL。

【问题讨论】:

    标签: c# sql visual-studio


    【解决方案1】:

    你可以试试这个。 where 子句将出现在 group by 之前。
    您可以找到此链接以获取更多信息。Group by

      ;WITH CTE AS (
      SELECT ID, Name,Date FROM Records  
      WHERE Date BETWEEN '" +Start_Date+ "' AND '" +End_Date+ "' )
      SELECT COUNT(ID) AS COUNT_ID, NAME FROM CTE
      GROUP BY Name ORDER BY COUNT(ID) DESC;
    

    或者你可以写成

      SELECT COUNT(ID) AS COUNT_ID, NAME FROM (
      SELECT ID, Name,Date FROM Records  
      WHERE Date BETWEEN '" +Start_Date+ "' AND '" +End_Date+ "' ) AS D
      GROUP BY Name ORDER BY COUNT(ID) DESC;
    

    【讨论】:

    • 谢谢@DarkRob 我尝试了你的建议。它给了我这个错误列'Records.Date'在选择列表中无效,因为它既不包含在聚合函数或GROUP BY子句中。
    • 天啊。那工作得很好。非常感谢@DarkRob。从昨晚开始,我一直在为此苦苦挣扎。
    • 现在我遇到了另一个问题。该代码有效,但它给了我每天的计数。不是范围内的总数。
    • 那是完美的。太感谢了。 @DarkRob
    【解决方案2】:

    您的查询格式不正确。试试这个:

    SELECT COUNT(ID), Name,Date 
    FROM Records 
    WHERE Date BETWEEN '" +Start_Date+ "' AND '" +End_Date+ "'
    GROUP BY Name, Date 
    ORDER BY COUNT(ID) DESC;
    

    【讨论】:

    • 谢谢@Ronel Calinisan 我尝试了你的建议。它给了我这个错误“列'Records.Date'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”
    • 只需在 group by 子句中添加日期即可。我会更新我的答案。
    • 谢谢@Ronel。现在我没有收到任何错误,但它也给了我按日期分组的输出。这意味着每天分开。但我想要所选日期范围内的总数。
    【解决方案3】:

    您的查询顺序错误。

    试试下面的查询,它工作正常。

    SELECT COUNT(ID), Name, Date FROM Records 
    WHERE Date BETWEEN '" +Start_Date+ "' AND '" +End_Date+ "'
    GROUP BY Name ORDER BY COUNT(ID) DESC;
    

    要了解查询的执行顺序,请点击链接 https://sqlbolt.com/lesson/select_queries_order_of_execution

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2021-12-19
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-15
      • 1970-01-01
      相关资源
      最近更新 更多