2015-10-19 4 views
-1

Я хотел бы, чтобы выбрать умножить условия, используя ниже запроса:SQL - Выберите умножьте условия

SELECT (SELECT count(*) 
     FROM users 
    ) 
     as totalusers, 
     (SELECT sum(cashedout) 
      FROM users 
     ) AS cashedout, 
     (SELECT COUNT(*) 
      FROM xeon_users_rented 
     ) AS totalbots, 
(SELECT sum(value) 
      FROM xeon_stats_clicks 
WHERE typ='3' OR typ='1' 
     ) AS totalclicks 

Этот запрос занимает чуть меньше секунды (0,912, чтобы быть точным), чтобы выполнить. Это значительно замедляет работу с тысячами запросов.

То, что кажется логичным для меня такой подход:

SELECT (SELECT count(*), sum(cashedout) 
     FROM users 
    ) 
     as totalusers, cashedout, 
     (SELECT COUNT(*) 
      FROM xeon_users_rented 
     ) AS totalbots, 
(SELECT sum(value) 
      FROM xeon_stats_clicks 
WHERE typ='3' OR typ='1' 
     ) AS totalclicks 

Однако это не работает, как я получаю следующее сообщение об ошибке:

#1241 - Operand should contain 1 column(s) 

Кроме того, как я могу присоединиться два других таблицы "xeon_users_rented" и "xeon_stats_clicks" в моем первом запросе?

+0

опубликовать схему базы данных, выборка исходных данных и ожидаемый результат – Alex

ответ

0

Это медленный, потому что у вас есть несколько подзапросов. Вместо этого попробуйте использовать соединения.

Кроме того, список ваших таблиц, столбцов поможет нам лучше помочь вам.

0

Ваш второй запрос использует неправильный синтаксис, он должен быть

SELECT 
count(*) as totalusers, 
sum(cashedout) cashedout, 
(SELECT COUNT(*) FROM xeon_users_rented) AS totalbots, 
(SELECT sum(value) FROM xeon_stats_clicks 
WHERE typ='3' OR typ='1') AS totalclicks 
FROM users 
+0

намного быстрее! Однако я получаю сообщение о том, что на любом столбце нет индекса. Должен ли я добавить его? И что еще более важно, как добавить индекс, когда я использую «SELECT ... AS» – oliverbj

+0

'INDEX (typ, value)' может помочь. –

Смежные вопросы