2014-01-09 4 views
-3

У меня есть таблица со следующими столбцами:SQL GROUP BY выпуска запроса

DriverNumber; DriverName; CarNumber; DriverConditions; LogonTime; VehicleID 

эта таблица имеет запись для каждого LogonTime для каждого DriverNumber, и водитель может войти в различные транспортные средства.

, например:

93070495 Mehar 189 Parcel, V, Wheelchair, M50, Special, Animal, COD P...  Jan 2 2014 07:40:26:197AM 1029 
93070495 Mehar 189 Parcel, V, Wheelchair, M50, Special, Animal, COD P...  Jan 7 2014 08:09:50:097AM 1029 
25184313 Kerry 895 Parcel, Cheques, V, Wheelchair, Special, Animal, C...  Jan 3 2014 05:00:26:600PM 970 

, что я в основном хочу сделать, это показать, сколько раз DriverNumber бревна в каждой машине.

это то, что я сделал до сих пор:

SELECT DriverNumber, DriverName, CarNumber, DriverConditions, LogonTime, 
    count(DriverNumber) as DriverCount 
FROM SilverDrivers 
WHERE DriverNumber > 0 
GROUP BY CarNumber 

Это дает мне близко к тому, что я после, но он показывает только одну CarNumber за DriverNumber. например:

DRIVER HDL | DRIVER NAME | CAR NUMBER | DRIVER CONDITIONS | NUMBER OF LOGONS 
98749492 | Manpreet | 3   | Parcel   | 10 
32176467 | Mark  | 19   | Wheelchair  | 7 
92173581 | Varinder | 46   | Parcel   | 1 

, что я хочу, чтобы это выглядело, как это:

DRIVER HDL | DRIVER NAME | CAR NUMBER | DRIVER CONDITIONS | NUMBER OF LOGONS 
98749492 | Manpreet | 3   | Parcel   | 7 
98749492 | Manpreet | 12   | Parcel   | 3 
32176467 | Mark  | 19   | Wheelchair  | 4 
32176467 | Mark  | 214  | Wheelchair  | 3 
92173581 | Varinder | 46   | Parcel   | 1 
+5

Чувак, избавиться от значений, разделенных запятой, в столбцах. Читайте о нормализации базы данных. Сэкономит себе много головных болей ... – fancyPants

+0

что-то вроде: http://sqlfiddle.com/#!2/6be24f/1 –

ответ

7

Вы должны также группа по номеру водителя чтобы получить счет, который вы хотите. Кроме того, добавьте все остальные столбцы в свой пункт GROUP BY и удалите столбцы, которые не были бы уникальны от SELECT (я оставил только DriverName, так как я предполагаю, что это всегда одно и то же для одного DriverNumber).

SELECT DriverNumber, DriverName, CarNumber, count(*) as DriverCount 
FROM SilverDrivers 
WHERE DriverNumber > 0 
GROUP BY DriverNumber, DriverName, CarNumber 
+2

Пожалуйста, прекратите поощрять не ANSI-стандарт 'GROUP BY'. – Kermit

+1

@FreshPrinceOfSO Спасибо за напоминание, очень верно! Я исправил свой ответ. – Szymon

-5

Вы хотите либо

GROUP BY DriverNumber, CarNumber 

или

GROUP BY CarNumber, DriverNumber 
+2

Пожалуйста, прекратите поощрять стандарт ANSI 'GROUP BY'. – Kermit

+0

@FreshPrinceOfSO И как, молись сказать, будет * ты * получаешь тот же результат без использования 'GROUP BY'? Давай увидим это. Я осмеливаюсь придумать способ, который не требует 10x (или более) времени. «Стандарт ANSI» не похож на «стандарт WC3» - он идеален для создания реляционной базы данных. MYSQL не следует этому идеалу. – miyasudokoro

+3

Возможно использование 'DISTINCT'. Просто потому, что MySQL не следует за ним, не означает, что вы должны поощрять пользователей к этому не следовать. Если этот пользователь когда-либо перейдет на стандартную СУБД ANSI, они задаются вопросом, почему @spsc_tech попросил их неправильно использовать «GROUP BY». – Kermit