【问题标题】:MySQL- GROUP and COUNT by dateMySQL- 按日期分组和计数
【发布时间】:2011-07-21 09:49:10
【问题描述】:

我正在尝试找出获取所需查询结果的正确语法。这是场景:

我正在设计一个 SaaS 应用程序并有一个名为 trips 的表,如下所示:

table.trips  
- trip_id (pk, ai)  
- client_id (fk)  
- shop_id (fk)
- trip_date (date)

我需要能够获取表中每天的旅行次数(按 shop_id),然后提供每个 trip_date 的旅行次数,例如:

DATE         | TRIP SUM  
--------------------------
01-01-2011   | 3
01-02-2011   | 2  
01-03-2011   | 5

对正确的语法有什么想法吗?

【问题讨论】:

  • 您所说的“按商店 ID”是什么意思?您的结果集中没有 shop_id

标签: mysql group-by


【解决方案1】:
SELECT COUNT(*), trip_date , shop_id 
FROM trips 
GROUP BY trip_date , shop_id

【讨论】:

  • 您需要删除 WHERE 或放入 WHERE 条件。方式是无效的SQL。
  • 完美:-) 感谢您的帮助。添加了 WHERE shop_id=# 并且效果很好。干杯。
  • SELECT COUNT(*) AS customvar 总是帮助返回结果
【解决方案2】:

如果日期列还存储小时和分钟,您将需要对日期应用子字符串函数,以便只有日期列的 yyyy-mm-dd 部分,如下所示:

SELECT COUNT(*), substring(trip_date,1,10)
FROM trips
GROUP BY substring(trip_date,1,10);

【讨论】:

  • 这只是节省了我尝试按日期而不是时间编译行数的时间
【解决方案3】:

这样的?

select 
   DATE(trip_date) as [DATE],
   count(1) as [TRIP SUM]
from
   trips
group by
   DATE(trip_date), shop_id

我不是 mySQL 专家,但您需要使用 T-SQL DatePart 等效项,我使用了 DATE() 函数来去除日期的时间部分。

【讨论】:

    【解决方案4】:
    select trip_date,count(*)
    from trips
    where shop_id=[the shop id]
    group by trip_date
    

    只要日期采用您显示的格式,这将起作用。如果它也有时间,那么您必须删除时间。

    另外我不知道client_id是否必须进入这个查询,如果你也必须按它分组,那么你必须把它放在一边trip_date上select或group。如果要按它过滤,请将其放在 where 中。

    【讨论】:

      【解决方案5】:
      SELECT shop_id, trip_date, count(trip_id)
      FROM trips
      GROUP BY shop_id, trip_date
      

      【讨论】:

      • 请花一点时间来扩展这个仅代码的答案,了解它的工作原理以及为什么它是一个好主意。当新用户看到高级用户发布的纯代码答案时,他们认为这是“在 SO 上的做法”。为了他们的利益,请为更好的发布行为树立榜样——更不用说为了未来研究人员的利益了。
      猜你喜欢
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 2022-12-01
      • 2021-05-18
      • 2011-12-30
      相关资源
      最近更新 更多