我的数据库里有两张表。一个是司机名单,一个是违章名单。
每个违规都有一个状态,要么是黄色,要么是红色,我需要计算一个特定驾驶员的黄色违规和红色违规的数量,并按红色或黄色ASC或DESC排序。
驱动程序表:
AutoID(冲突表driverID的主键和外键)
客户
雇员身份
违规表:
违反(主键)
地位
driverID(驱动程序表中autoID的外键)
我运行下面的查询以获取所有红色或黄色违规
SELECT d.autoID, d.clientID, v.status FROM edsp_drivers d, edsp_violations v
WHERE d.employerID='000000028' AND d.autoID=v.driverID
AND (v.status = 'yellow' OR v.status='red')
ORDER BY d.autoID ASC
结果如下:
autoID clientID status
000000206 000000015 Yellow
000000206 000000015 Red
000000206 000000015 Yellow
000000206 000000015 Yellow
000000206 000000015 Yellow
000000206 000000015 Yellow
000000206 000000015 Yellow
000000206 000000015 Yellow
000000206 000000015 Yellow
000000206 000000015 Yellow
000000207 000000015 Yellow
000000207 000000015 Yellow
000000367 000000015 Yellow
000000367 000000015 Yellow
000000367 000000015 Red
000000368 000000015 Red
000000369 000000015 Yellow
000000369 000000015 Yellow
000000369 000000015 Red
000000369 000000015 Yellow
000000369 000000015 Yellow
000000369 000000015 Yellow
000000398 000000015 Yellow
000000398 000000015 Yellow
我需要做的是计数所有黄色或红色警报,按司机分组,按红色/黄色描述排序-这是我卡住的地方。
希望有人能帮忙?
最佳答案
听起来你想按驱动程序和违规颜色分组:
SELECT d.autoID, v.status, COUNT(v.status)
FROM edsp_drivers d
LEFT JOIN edsp_violations v
ON d.autoID = v.driverID
AND (v.status = 'yellow' OR v.status='red')
WHERE d.employerID = '000000028'
GROUP BY d.autoID, v.status
ORDER BY v.status ASC, COUNT(v.status) DESC
关于mysql - SQL查询以主键分割所有具有重复值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24358571/