2017-02-15 3 views
0

Я хотел бы запросить базу данных по нескольким переменным с разными типами данных.Запрос MySQL с несколькими условиями без WHERE

Мой запрос выглядит следующим образом:

SELECT var1, var2, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A1_U18_7', 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A34_U15_0', 
     CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN var5 ELSE 0 END AS 'A0_RISE' 
FROM dataset1 
GROUP BY var1 

На самом деле мне не нужно, чтобы суммировать результат первых двух запросов, но в противном случае я бы получил «0» в качестве выходного сигнала. С суммой я получил правильный ответ.

Однако это обходное решение нецелесообразно в случае с «A0_RISE», поскольку тип данных является текстом. Без функции SUM я тоже получил вывод «0».

Как я могу получить выход для всех переменных? Если у вас есть идея лучше, чем SUM-обходной путь для парных, я был бы очень признателен здесь за это!

+1

Общее правило GROUP BY гласит: Если указано предложение GROUP BY, каждая ссылка на столбец в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора! – jarlh

+0

Не очень хорошее решение, очень уродливое на самом деле, но вы можете использовать MAX вместо SUM, в случае, если всегда есть только одно значение, которое вы хотите вернуть – Johan

+1

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

ответ

0

бросил var5 в целое как это CAST(var5 AS UNSIGNED) и добавить var2 в группе как group by var1,var2

SELECT var1, var2, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN CAST(var5 AS UNSIGNED) ELSE 0 END) AS 'A1_U18_7', 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN CAST(var5 AS UNSIGNED) ELSE 0 END) AS 'A34_U15_0', 
     CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN CAST(var5 AS UNSIGNED) ELSE 0 END AS 'A0_RISE' 
FROM dataset1 
GROUP BY var1,var2 
1

Может использовать Макс?

SELECT var1, var2, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A1_U18_7', 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN var5 ELSE 0 END) AS 'A34_U15_0', 
     MAX(CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN var5 ELSE '' END) AS 'A0_RISE' 
FROM dataset1 
GROUP BY var1 
0

Возможно, group_concat()?

SELECT var1, 
     SUM(CASE WHEN var3 ='2008' AND var4='A1_U18' THEN var5 ELSE 0 END) AS A1_U18_7, 
     SUM(CASE WHEN var3='2015' AND var4='A1_U18' THEN var5 ELSE 0 END) AS A34_U15_0, 
     GROUP_CONCAT(CASE WHEN var3 = '2015' AND var4 = 'A0_RISE' THEN var5 END) AS A0_RISE 
FROM dataset1 
GROUP BY var1; 

Не включайте var2 в SELECT, если вы также включить его в GROUP BY.

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