2016-04-22 4 views
2

У меня есть эта таблица в базе данных MySQL:запросов, сумма, с условием в одном запросе с MySQL

TABLE rating 
| id   (int, primary) 
| id_company (int, index) 
| state  (enum: 'waiting','done','refuse') 
| rating  (int between 1 and 5) 

Я хочу, чтобы получить эту статистику за один id_company:

  • количество линий
  • номер строки с состоянием = сделано
  • рейтинг сумма
  • рейтинг
  • сумма с состоянием = сделано

Для этого я 2 запросов (Exemple с id_company = 2):

SELECT COUNT(1) as `nbr`, SUM(`rating`) as `total` FROM `rating` WHERE `id_company`=2 
SELECT COUNT(1) as `nbr`, SUM(`rating`) as `total` FROM `rating` WHERE `id_company`=2 AND `state`='done' 

Но можно сделать уникальный запрос, чтобы получить эту статистику?

ответ

1

Вы можете попробовать что-то вроде этого:

SELECT COUNT(*) as `nbr1`, 
     SUM(`rating`) as `total1`, 
     SUM(`state`='done') as `nbr2`, 
     SUM(CASE 
       WHEN `state`='done' THEN `rating` 
       ELSE 0 
      END) as `total2` 
FROM `rating` 
WHERE `id_company`=2 
+0

Молодцы, спасибо. Почему бы не позволить id_company в предложении where? он тоже работает. – Jeremy

+1

@Jeremy Да, вы правы. Предикат 'id_company' также должен использоваться в предложении' WHERE', потому что он заставляет запрос работать быстрее. –

+1

Почему вы сохраняете 'id_company = 2' в случаях при добавлении 'where'? – splash58