2014-09-19 2 views
-1

У меня есть этот простой MYSQL table1:граф не пустые поля в MYSQL

id 
1 
2 
3 

И это таблица2:

id | question | answer 
    1 | how  | 
    2 | are  | fine 
    3 | you  | ok 

И этот простой запрос:

SELECT table1.id,COUNT(answer NOT NULL) FROM table1 LEFT JOIN table2 
     ON table1.id = table2.id 

Я хочу сосчитать непустые поля ответа. Я пробовал NOT NULL, но он не работает, так как столбец answer равен NOT NULL, и где не применимо, так как он приведет к основному запросу, чтобы вернуть ничего.

+0

'SUM (ответ <> '')' – Karolis

+0

вы с группой пунктом в запросе? –

+0

Нет необходимости в группе, я думаю –

ответ

0

Просто счет Количество строк, содержащих ответы NULL!

SELECT COUNT(1) FROM table /* COUNT(1) will go on counting rows frequncy*/ 
where answer IS NOT NULL 
+0

Извините, что этот выбор на самом деле является LEFT JOIN, но я упрощаю запрос ради вопроса. Итак, если я ставлю предложение WHERE, это не приведет к результату –

+0

LEFT JOIN? как так....? Пожалуйста, покажите оригинальный запрос? : \ – NoobEditor

0

Если столбец ответа не имеет значения NULL, то IS NOT NULL вернет все строки. То, что вы хотите «не пустая строка»:

SELECT COUNT(*) 
FROM table 
WHERE answer <> ""; 

Если ответ обнуляемый, то вы можете проверить оба условия:

SELECT COUNT(*) 
FROM table 
WHERE answer IS NOT NULL AND answer <> ""; 
1

Вы можете использовать CHAR_LENGTH(str) функции, чтобы проверить длину значения. Использование ниже запроса:

SELECT COUNT(answer) FROM table WHERE CHAR_LENGTH(answer)>0; 

От Reference Doc.

EDIT:
Вы можете попробовать этот запрос:

SELECT COUNT(answer) FROM table1 LEFT JOIN table2 
     ON table1.id = table2.id AND CHAR_LENGTH(table2.answer)>0 
+0

извините, этот выбор на самом деле является LEFT JOIN, но я упрощаю запрос ради вопроса. Поэтому, если я ставлю предложение WHERE, это не приведет к результату –

+1

Отправьте запрос с помощью LEFT JOIN. –

+0

@JavaDev, вам нужно избавиться от NULL, COUNT (expr) counts 1 для каждого не нулевого выражения. NOT NULL преобразует NULL-ответы в BOOLEAN, поэтому будут учитываться ответы NULL. – Arth

1

Вы могли бы попробовать это, чтобы захватить все, что является пустым:

SELECT COUNT(id) FROM table 
where answer IS NOT NULL or answer <>'' 

Это должно захватывать и подсчитывать любую строку, которая имеет какое-либо значение в «ответе».

Или, если есть присоединиться:

SELECT  table1.count(id), table2.question 
FROM   table1 LEFT OUTER JOIN 
         tabel1 ON table1.id = table2.id 
GROUP BY table1.id,table2.question 
HAVING  (table2.answer <> '') OR (table2.answer IS NOT NULL) 
+0

Извините, что этот выбор на самом деле является ЛЕВЫМ ПРИСОЕДИНЕНИЕМ, но я упрощаю запрос ради вопроса. Поэтому, если я ставлю предложение WHERE, это не приведет к результату –

+0

Используйте HAVING. Это то, для чего это используется. – durbnpoisn

+0

не могли бы вы объяснить больше, так как я никогда не слышал о том, что у меня есть –

0
SELECT COUNT(t2.answer) count 
    FROM table1 t1 
LEFT JOIN table2 t2 
     ON t2.id = t1.id 
     AND t2.answer != '' 

ИЛИ

SELECT t1.id, COUNT(t2.answer) count 
    FROM table1 t1 
LEFT JOIN table2 t2 
     ON t2.id = t1.id 
     AND t2.answer != '' 
GROUP BY t1.id 
0

Вы можете использовать эту SUM(CHAR_LENGTH((answer))/CHAR_LENGTH((answer))) формулу для подсчета полей не пустой ответ.

SELECT table1.id, SUM(CHAR_LENGTH((answer))/CHAR_LENGTH((answer))) FROM table1 

LEFT JOIN table2 ON table1.id = table2.id

0

Количество каждого из столбцов:

SELECT count(`id`) + count(`personal_id`) + count(`f_name`) + ... 
FROM `detail_members` WHERE `personal_id` = '$personalid' 
Смежные вопросы