0

这是我的数据库结构

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 次

4

1 回答 1

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介于usersusers_vehicles将包括所有user_id值,即使它user_id不存在于users_vehicles. 同样,RIGHT JOINbetweenusers_vehiclesvehicles将包括所有veh_id值,即使它们不存在于user_vehicles.

于 2013-07-29T17:18:19.067 回答