2015-08-07 4 views
1

У меня есть mySQLschema и запросы на sqlfiddle.Как объединить эти MySQL-запросы?

В основном я пытаюсь получить count элементов в пределах каждого интервала дат.

Все в настоящее время работает по назначению, однако я нашел, что мне нужно использовать несколько запросов MySQL, чтобы получить требуемые данные.

Есть ли способ объединить эти запросы для произвольного количества интервалов дат? Поэтому в примере у меня есть 2 разных запроса для запроса двух разных интервалов дат. Я хотел бы узнать, можно ли запросить, скажем, 3 или 4 или более интервала дат в одном запросе?

ответ

0

Вам использовать conditional sum что-то, как

select 
sum( 
    case when joined > '2014-01-01' and joined < '2014-06-30' 
    then 1 else 0 end 
) as count1, 
sum( 
    case when joined > '2014-07-01' and joined < '2014-12-31' 
    then 1 else 0 end 
) as count2 
from Users 
0

Это во многом зависит от того, что вы имеете в виду «объединить»:

Один ряд

Вы можете использовать Abhik's answer или что-то похожее на это :

SELECT firstHalf.count, secondHalf.count 
FROM 
    (SELECT COUNT(1) as count FROM Users WHERE joined BETWEEN '2014-01-01' AND '2014-06-30') firstHalf, 
    (SELECT COUNT(1) as count FROM Users WHERE joined BETWEEN '2014-07-01' AND '2014-12-31') secondHalf; 

Несколько Ряды

Вы можете использовать UNION ALL для выполнения запросов, в то же время и объединяющие результаты:

SELECT * FROM 
(SELECT COUNT(1) as count FROM Users WHERE joined BETWEEN '2014-01-01' AND '2014-06-30') firstHalf 
UNION ALL 
(SELECT COUNT(1) as count FROM Users WHERE joined BETWEEN '2014-07-01' AND '2014-12-31') secondHalf; 

Вопрос Вы не спрашивали

Это звучит как вы хотите получить подсчеты для полу-произвольных диапазонов дат. Вот что такое GROUP BY в сочетании с MySQL Date Operations для. Это приведет к подсчету всех пользователей, которые присоединились с начала 2010 года, сгруппированы по годам и какая половина года (0 или 1) они подписали.

SELECT YEAR(joined) as year, MONTH(joined)/6 AS yearHalf, COUNT(*) 
FROM Users 
WHERE joined >= '2010-01-01' 
GROUP BY YEAR(joined), MONTH(joined)/6; 

Используя формат запроса выше, вы можете легко изменить, как мелко-зернистой ваши отсчеты, являются ли они сгруппированы по годам и т.д.

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