我的数据库里有两张表。一个是司机名单,一个是违章名单。
每个违规都有一个状态,要么是黄色,要么是红色,我需要计算一个特定驾驶员的黄色违规和红色违规的数量,并按红色或黄色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/

10-14 16:22
查看更多