2015-01-15 3 views
0

Фон: Я пишу запрос для сравнения actual and ideal growth data for children. Дети видят док один раз в год, док-меры, очки накладываются на типичные кривые роста. Проблема в том, что для используемого графического компонента требуется фиксированное количество точек данных. Нет проблем с отсутствием данных как NULL, но они должны быть там.Как заполнить недостающие значения в запросе MySQL

данных у меня есть:

age weight/kg 
----------------- 
2 10 
3 11 
6 20 

Ожидаемый:

age weight/kg 
----------------- 
2 10 
3 11 
4 NULL 
5 NULL 
6 20 

Требуемые значение возраст фиксируется (2-6 в данном примере), и может быть жестко, как они Арен 't в любой таблице, иначе я бы присоединился и сгруппировался. Я хотел бы использовать один запрос.

+0

возможно дубликат [Как найти пробелы в последовательной нумерации в MySQL?] (Http://stackoverflow.com/questions/4340793/how-to-find-gaps-in-sequential-numbering-in- mysql) – hampusohlsson

+0

@hamohl, не совсем. Этот вопрос касается поиска недостающих записей, мой вопрос заключается в слиянии неполных множеств с полной последовательностью. – PeerBr

ответ

2

Если вы хотите запрос, где последовательность может быть сформирована в пределах от 0 до 99, вот запрос. Вы можете получить вес из Sub-Query, который находится в вашей таблице. Я дал диапазон от 2 до 6 здесь.

SELECT 
    SEQ.SeqValue AS age, 
    (SELECT weight FROM your_table WHERE age = SEQ.SeqValue) AS "weight/kg" 
FROM 
(
SELECT 
    (TENS.SeqValue + ONES.SeqValue) SeqValue 
FROM 
    (
    SELECT 0 SeqValue 
    UNION ALL 
    SELECT 1 SeqValue 
    UNION ALL 
    SELECT 2 SeqValue 
    UNION ALL 
    SELECT 3 SeqValue 
    UNION ALL 
    SELECT 4 SeqValue 
    UNION ALL 
    SELECT 5 SeqValue 
    UNION ALL 
    SELECT 6 SeqValue 
    UNION ALL 
    SELECT 7 SeqValue 
    UNION ALL 
    SELECT 8 SeqValue 
    UNION ALL 
    SELECT 9 SeqValue 
    ) ONES 
CROSS JOIN 
    (
    SELECT 0 SeqValue 
    UNION ALL 
    SELECT 10 SeqValue 
    UNION ALL 
    SELECT 20 SeqValue 
    UNION ALL 
    SELECT 30 SeqValue 
    UNION ALL 
    SELECT 40 SeqValue 
    UNION ALL 
    SELECT 50 SeqValue 
    UNION ALL 
    SELECT 60 SeqValue 
    UNION ALL 
    SELECT 70 SeqValue 
    UNION ALL 
    SELECT 80 SeqValue 
    UNION ALL 
    SELECT 90 SeqValue 
    ) TENS 
) SEQ 
WHERE SEQ.SeqValue BETWEEN 2 AND 6 
+0

Спасибо, это было великолепно. Добавлен 'ORDER BY age ASC' и хорошо идти. Большое спасибо от вашего ответа, спасибо еще раз. – PeerBr

0

Использование IFNULL() в запросе, чтобы присвоить ему значение ноль http://www.mysqltutorial.org/mysql-ifnull/

+0

Спасибо, но часть ifnull() является наименьшей из моих проблем. Основная проблема - объединение смешанных и фиксированных результатов. – PeerBr

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