【问题标题】:SQL: Counting and grouping rowsSQL:对行进行计数和分组
【发布时间】:2013-10-04 00:09:17
【问题描述】:
id | userid | exerciseid | date                | time | weight | distance | reps
1  | 24     | 1          | 2013-09-28 00:00:00 | 2321 | 231    | 121      | NULL
2  | 24     | 24         | 2013-09-28 00:00:00 | 2321 | 231    | 121      | NULL
3  | 24     | 1          | 2013-09-28 00:00:00 | 2321 | 231    | 121      | NULL
4  | 24     | 1          | 2000-00-00 00:00:00 | NULL | 100    | NULL     | 2
5  | 24     | 1          | 2013-09-28 00:00:00 | 2321 | 231    | 121      | NULL

第 1、3 和 5 行相同。我想做一个计数,将它们组合在一起,同时添加一个包含计数值的列。

SELECT id, userid, exerciseid, date, time, weight, distance, reps    
FROM `exercises`
WHERE `userid` = 1 AND `date` < now()

所以我希望它也能返回类似的东西:

id | userid | exerciseid | date                | time | weight | distance | reps | count
1  | 24     | 1          | 2013-09-28 00:00:00 | 2321 | 231    | 121      | NULL | 3
4  | 24     | 1          | 2000-00-00 00:00:00 | NULL | 100    | NULL     | 2    | NULL

【问题讨论】:

    标签: mysql sql count


    【解决方案1】:

    试试这个

    SELECT id, userid, exerciseid, date, time, weight, distance, reps,
           count(*) as count
    FROM `exercises`
    WHERE userid = 1 AND date < now()
    GROUP BY id, userid, exerciseid, date, time, weight, distance, reps    
    

    【讨论】:

    • 如果为 1,count 列是否可以为 NULL?
    • 您可以将 count( * ) 替换为 IF (COUNT( * ) = 1, NULL, COUNT( * )) AS count
    【解决方案2】:

    试试这个:

    SELECT Count(*) As CountM, id, userid, exerciseid, date, time, weight, distance, reps    
    FROM `exercises`
    WHERE `userid` = 1 AND `date` < now()
    Group by id, userid, exerciseid, date, time, weight, distance, reps  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多