Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT COUNT(SELECT..) .. => .. syntax .. / 25 сообщений из 25, страница 1 из 1
05.03.2015, 10:28:06
    #38895560
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
Доброго времени суток.

Чего то заплюхался с запросом...

Приготовил вырезку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE TABLE `model` (
  `type_id` int(11) NOT NULL,
  `mark_id` int(11) NOT NULL,
  `doc_id` int(11) NOT NULL,
  KEY `mid` (`mark_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1;

INSERT INTO `model` (`type_id`, `mark_id`, `doc_id`)
VALUES
	(12,3,1426),
	(12,3,1426),
	(12,3,1426),
	(12,3,1427),
	(12,3,1427),
	(12,1,378),
	(12,1,378),
	(12,1,378);



Делаю выборку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
	ml.type_id,
	ml.mark_id,
	ml.doc_id
FROM model AS ml
WHERE 1=1
	AND ml.type_id = 12
GROUP BY ml.doc_id
ORDER BY ml.mark_id,ml.doc_id
;



Получаю:
Код: xml
1.
2.
3.
4.
5.
6.
7.
------------------------------
| type_id | mark_id | doc_id |
------------------------------
| 12      | 1       | 378    |
| 12      | 3       | 1426   |
| 12      | 3       | 1427   |
------------------------------



По сути мне нужно выбрать те строки где mark_id не повторяется.

Пробую вывести кол-во для начала:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
	ml.type_id,
	ml.mark_id,
	COUNT( SELECT ml2.doc_id FROM model AS ml2 WHERE ml2.type_id=12 AND ml2.mark_id=ml.mark_id GROUP BY ml2.doc_id ) AS docCount,
	ml.doc_id
FROM model AS ml
WHERE 1=1
	AND ml.type_id = 12
GROUP BY ml.doc_id
ORDER BY ml.mark_id,ml.doc_id
;



Получаю ошибку:
Код: sql
1.
2.
3.
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near 
'SELECT ml2.doc_id FROM model AS ml2 WHERE ml2.type_id=12 AND ml2.mark_id=ml.mark' at line 4



Подскажите как правильно...можно линком, сам сгуглить не смог...
Благодарю.
...
Рейтинг: 0 / 0
05.03.2015, 10:38:55
    #38895571
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
Сформулируйте задачу, а не свои попытки её решить. Например, типа такого: получить уникальные пары (type_id, mark_id) и для каждой такой пары - количество уникальных doc_id.
...
Рейтинг: 0 / 0
05.03.2015, 11:04:19
    #38895608
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
Нужно заменить type_id (к пр на 1), если запись одна
...
Рейтинг: 0 / 0
05.03.2015, 12:29:07
    #38895787
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
См. конструкцию Group By + Having
...
Рейтинг: 0 / 0
05.03.2015, 17:29:48
    #38896374
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
тоесть конструкция

COUNT( SELECT * from ...) никого не смутила?
...
Рейтинг: 0 / 0
05.03.2015, 17:37:00
    #38896387
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
alex564657498765453 , потому я и попросил ТС показывать не свои измышления...
...
Рейтинг: 0 / 0
06.03.2015, 08:50:08
    #38896797
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
alex564657498765453тоесть конструкция

COUNT( SELECT * from ...) никого не смутила?

а чего, нормальная конструкция, немного скобок добавить и будет всё ок.
...
Рейтинг: 0 / 0
06.03.2015, 09:45:02
    #38896853
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
MasterZivа чего, нормальная конструкция, немного скобок добавить и будет всё ок.
Буду признателен, если покажите..
...
Рейтинг: 0 / 0
06.03.2015, 10:31:19
    #38896903
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
BorodatychMasterZivа чего, нормальная конструкция, немного скобок добавить и будет всё ок.
Буду признателен, если покажите..

да тут все будут признательны:)
...
Рейтинг: 0 / 0
06.03.2015, 10:43:03
    #38896918
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
MasterZivalex564657498765453тоесть конструкция

COUNT( SELECT * from ...) никого не смутила?

а чего, нормальная конструкция, немного скобок добавить и одно слово переставить в другое место и будет всё ок.вот так
...
Рейтинг: 0 / 0
06.03.2015, 13:03:24
    #38897081
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
tanglirвот так
Если вы на это намекаете:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
	ml.type_id,
	ml.mark_id,
	( SELECT COUNT(ml2.doc_id) FROM model AS ml2 WHERE ml2.type_id=12 AND ml2.mark_id=ml.mark_id GROUP BY ml2.doc_id ) AS docCount,
	ml.doc_id
FROM model AS ml
WHERE 1=1
	AND ml.type_id = 12
GROUP BY ml.doc_id
ORDER BY ml.mark_id,ml.doc_id
;


То:
Код: sql
1.
Subquery returns more than 1 row
...
Рейтинг: 0 / 0
06.03.2015, 13:05:17
    #38897083
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
То что в скобках:
Код: sql
1.
SELECT COUNT(ml2.doc_id) FROM model AS ml2 WHERE ml2.type_id=12 AND ml2.mark_id=3 GROUP BY ml2.doc_id


Возвращает две строки... (ml2.mark_id=3 как частный случай)
...
Рейтинг: 0 / 0
06.03.2015, 13:08:55
    #38897090
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
alex564657498765453тоесть конструкция

COUNT( SELECT * from ...) никого не смутила?
Позвольте. Меня не смутила. Если не затруднит, что в ней не так, можно линком на матчасть.
...
Рейтинг: 0 / 0
06.03.2015, 13:29:32
    #38897132
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
Borodatychчто в ней не так http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count
под каунт ставится выражение, а вы пытаетесь применить его к подзапросу
...
Рейтинг: 0 / 0
06.03.2015, 14:52:09
    #38897285
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
tanglir http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count
под каунт ставится выражение, а вы пытаетесь применить его к подзапросу
Благодарю и прошу прощения за лень, очевидное рядом.

Но тогда вы ставите меня в тупик, предавая загадочности, еще большим не пониманием написанного Вами:
tanglir и одно слово переставить в другое место и будет всё ок.вот так
...
Рейтинг: 0 / 0
06.03.2015, 15:38:08
    #38897358
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
Borodatych , ну так а формулировку ЗАДАЧИ мы когда-нить услышим?
...
Рейтинг: 0 / 0
06.03.2015, 16:28:44
    #38897433
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
tanglirBorodatychчто в ней не так http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count
под каунт ставится выражение, а вы пытаетесь применить его к подзапросу

Я и говорю. обернуть в ещё одни скобки -- и будет подзапрос, т.е. корректное выражение.
...
Рейтинг: 0 / 0
06.03.2015, 17:38:24
    #38897499
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
MasterZivЯ и говорю. обернуть в ещё одни скобки -- и будет подзапрос, т.е. корректное выражение.
Дико извиняюсь, но можно как для дебила, подправьте до правильного:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
	ml.type_id,
	ml.mark_id,
	COUNT( SELECT ml2.doc_id FROM model AS ml2 WHERE ml2.type_id=12 AND ml2.mark_id=ml.mark_id GROUP BY ml2.doc_id ) AS docCount,
	ml.doc_id
FROM model AS ml
WHERE 1=1
	AND ml.type_id = 12
GROUP BY ml.doc_id
ORDER BY ml.mark_id,ml.doc_id
;



Akina Borodatych , ну так а формулировку ЗАДАЧИ мы когда-нить услышим?
Вы уже спрашивали ( 17345385 ) и я Вам ниже отписался ( 17345536 ).
...
Рейтинг: 0 / 0
06.03.2015, 18:43:05
    #38897545
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
BorodatychMasterZivЯ и говорю. обернуть в ещё одни скобки -- и будет подзапрос, т.е. корректное выражение.
Дико извиняюсь, но можно как для дебила, подправьте до правильного:


Я имел в виду так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
	ml.type_id,
	ml.mark_id,
	COUNT( (SELECT ml2.doc_id FROM model AS ml2 WHERE ml2.type_id=12 AND ml2.mark_id=ml.mark_id GROUP BY ml2.doc_id) ) AS docCount,
	ml.doc_id
FROM model AS ml
WHERE 1=1
	AND ml.type_id = 12
GROUP BY ml.doc_id
ORDER BY ml.mark_id,ml.doc_id
;




Но я не могу утверждать, что это правильно или неправильно , потому что мы не знаем, что же тебе нужно.
Я могу лишь сказать, что придраться к SELECT внутри COUNT я не могу .
...
Рейтинг: 0 / 0
06.03.2015, 19:10:53
    #38897557
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
MasterZivtanglirпропущено...
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count
под каунт ставится выражение, а вы пытаетесь применить его к подзапросу

Я и говорю. обернуть в ещё одни скобки -- и будет подзапрос, т.е. корректное выражение.

держащийся на чесном слове...ибо он может вернуть больше одного значения. а главное, выборка селектом должна быть одного значения а не звёздочка!!!
...
Рейтинг: 0 / 0
06.03.2015, 19:51:28
    #38897575
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
Borodatychя Вам ниже отписался ( 17345536 ).Это не постановка задачи. Это опять описание куска решения (до сих пор не озвученной задачи) выбранным Вами способом.
Ну не хотите - не надо.
...
Рейтинг: 0 / 0
06.03.2015, 19:53:51
    #38897578
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
В общем всем, принявшим участие, спасибо.
У меня было всего 41 запись, и я их давно в ручную обработал.
Просто был интерес в автоматизации, знаний ради.
Благодарю!
...
Рейтинг: 0 / 0
06.03.2015, 19:56:04
    #38897581
Borodatych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
AkinaЭто не постановка задачи. Это опять описание куска решения (до сих пор не озвученной задачи) выбранным Вами способом. Ну не хотите - не надо.
Я просто не понимаю что Вы от меня хотите услышать. То что в том ответе - это именно то что я сделал ручками..
...
Рейтинг: 0 / 0
07.03.2015, 08:43:07
    #38897791
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
BorodatychНо тогда вы ставите меня в тупик, предавая загадочности, еще большим не пониманием написанного Вами:
tanglirпропущено...
вот таквместо count( select a from ...) сделать select (count (a) from)
Добавили скобок и переставили одно слово )
...
Рейтинг: 0 / 0
07.03.2015, 08:43:34
    #38897792
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT COUNT(SELECT..) .. => .. syntax ..
tanglirсделать (select count (a) from)вот так, конечно же
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT COUNT(SELECT..) .. => .. syntax .. / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]