Mysql统计几个字段

Mysql统计几个字段,mysql,join,count,Mysql,Join,Count,我有一张桌子 id|user_id|start|stop 1| 1| 1| 1 2| 2| 1| 1 3| 2| 1| 0 4| 3| 0| 0 id |用户| id |开始|停止 1| 1| 1| 1 2| 2| 1| 1 3| 2| 1| 0 4| 3| 0| 0 我想得到下一个结果 user_id|total|start|s

我有一张桌子

id|user_id|start|stop 1| 1| 1| 1 2| 2| 1| 1 3| 2| 1| 0 4| 3| 0| 0 id |用户| id |开始|停止 1| 1| 1| 1 2| 2| 1| 1 3| 2| 1| 0 4| 3| 0| 0 我想得到下一个结果

user_id|total|start|stop       1|    1|    1|   1       2|    2|    2|   1       3|    1|    0|   0 用户id |总计|开始|停止       1|    1|    1|   1       2|    2|    2|   1       3|    1|    0|   0
所以我想计算3,并按用户id和get对其进行分组。是否可以使用联接和不使用派生表来准备查询?

总计行数,以计算两次使用1 in
start
和1 in
stop
的行数

SELECT user_id, 
       Sum (start) AS start, 
       Sum (stop)  AS stop, 
       Count(*)    AS total 
FROM   tablename 
GROUP  BY user_id 

如何为
用户id=2
计算
开始
停止
?根据您的表格,您是如何得到下一个结果的?用户id=2的行似乎应该是
2*3*| 2 | 1
@Kevin:不,有两行
用户id=2
。为什么应该是
3
?我明白了-我以为总数是所有开始和停止的总和。(即开始+停止)即使在这种情况下,
count
给出了与
sum
相同的答案,我还是建议使用
count
无论如何-如果表中的数据发生变化,并且允许0或1以外的值,它仍然可以工作。count函数将对列中的值0或1进行计数。所以结果是错误的。Op想知道用户启动和停止的次数以及该用户id的记录总数。我误解了这个问题,并更正了我的答案。你介意取消否决票吗?@Kevin,我想知道在目前的情况下SUM是否会比Case快。除非表格非常非常大,否则差异应该非常小。此外,这取决于您的索引策略。但它应该非常相似。
SELECT   user_id, COUNT(*) total, SUM(start=1) start, SUM(stop=1) stop
FROM     my_table
GROUP BY user_id
SELECT user_id, 
   count(case start WHEN 1 then 1 else null end) AS start, 
   count(case stop WHEN 1 then 1 else null end)  AS stop, 
   count (*) AS total 
FROM   tablename 
GROUP  BY user_id