Mysql统计几个字段
我有一张桌子 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| 0Mysql统计几个字段,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
所以我想计算3,并按用户id和get对其进行分组。是否可以使用联接和不使用派生表来准备查询?总计行数,以计算两次使用1 in
start
和1 instop
的行数
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