这是我的数据库结构
id, user_id, veh_id, amount
1, 2, 3, 123
2, 2, 4, 125
3, 1, 3, 122
4, 1, 4, 126
我正在尝试让SELECT为每个user_id计算它作为每个veh_id的数量的时间。如果用户在veh_id上没有金额,我想为此显示0。
我正在考虑使用SUM(IF()),但我不知道如何通过user_id将它们放在一个漂亮的表中。
这是我到目前为止所拥有的
SELECT user_id, SUM(IF(user_id !=0, 1, 0)) AS COUNT
FROM TABLE
GROUP BY user_id
我是在正确的轨道上得到我想要的东西
这是我修改过的问题,其结果与我想要的相近:
我是否可以计算用户是veh_id上出价最高者的时间 因此,如果用户对30辆汽车进行投标,我可以看到他是12次出价最高的人
答案 0 :(得分:0)
为了获得count = 0的情况,您需要有一个可以与此表相关的车辆表。如果没有这个,你就没有明确的方法去理解可能的车辆是什么。我还假设您有一个用户表,如果没有这个,您不知道完整的Universe用户。您需要加入所有这三个表来获得答案。
对于这个例子,我假设表名是users,users_vehicles,vehicles
SELECT u.user_id, v.vehicle_id, COUNT(uv.id)
FROM users AS u
LEFT JOIN users_vehicles AS uv
ON u.user_id = uv.user_id
RIGHT JOIN vehicles AS v
ON uv.veh_id = v.veh_id
GROUP BY u.user_id, v.vehicle_id
请注意,LEFT JOIN
和users
之间的users_vehicles
将包含所有user_id
值,即使user_id
中不存在users_vehicles
。同样,RIGHT JOIN
和users_vehicles
之间的vehicles
将包含所有veh_id
值,即使user_vehicles
中没有这些值也是如此。