Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложная выборка из записей / 6 сообщений из 6, страница 1 из 1
02.12.2016, 23:47
    #39359751
bastardi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная выборка из записей
Привет всем!

Есть интересная задача для знатоков. Имеем таблицу table со многими полями, в том числе с полем Id и полем color Значения в полях не уникальны и могут повторяться. В поле ID - число, в поле color - цвет. Переходим к таблице, примерный вид такой

Id | ... | ... | ... | color | ... | ... | ...
1 | ... | ... | ... | red
2 | ... | ... | ... | red
2 | ... | ... | ... | blue
5 | ... | ... | ... | blue
5 | ... | ... | ... | green
7 | ... | ... | ... | black
8 | ... | ... | ... | red
22 | ... | ... | ... | blue
33 | ... | ... | ... | red
33 | ... | ... | ... | blue
33 | ... | ... | ... | green

Задача. Выбрать distinct table.ID записей, у которых определенному значению поля ID есть значения поля color red И blue . В нашем случае итогом будет 2 и 33. Для записи с ID=1 и color=red нет ни одной записи с ID=1 и color=blue, для записи с ID=5 и color=blue нет ни одной записи с ID=5 и color=red и т.д. Записи с ID=33 имеют "лишний" цвет green, но это не противоречит поставленному условию, поэтому в результате будет присутствовать 33. Итак
2
33
Вдогонку, надо составить похожий запрос, получающий количество этих полей, то есть 2 (а не 5). Я так понимаю, что нужно составлять запрос SELECT с вложенным SELECT запросом? А можно ли это сделать без вложенных запросов? Так или иначе, прошу дать решение этой задачи. Я не знаю ни одного решения, так как нуб
Спасибо заранее, рябят!
...
Рейтинг: 0 / 0
03.12.2016, 01:25
    #39359779
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная выборка из записей
bastardi,

 Ну такое.

Что в ней интересного?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
mysql> CREATE TABLE `colors` (
    ->   `id` int(11) NOT NULL,
    ->   `color` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO `colors` (`id`, `color`)
    -> VALUES
    -> (1, 'red'),
    -> (2, 'red'),
    -> (2, 'blue'),
    -> (5, 'blue'),
    -> (5, 'green'),
    -> (7, 'black'),
    -> (8, 'red'),
    -> (22, 'blue'),
    -> (33, 'blue'),
    -> (33, 'green'),
    -> (33, 'red');
Query OK, 11 rows affected (0.00 sec)
Records: 11  Duplicates: 0  Warnings: 0

mysql> SELECT 
    -> id
    -> FROM 
    -> colors
    -> WHERE 
    -> color = 'red'
    -> OR 
    -> color = 'blue'
    -> GROUP BY 
    -> id
    -> HAVING 
    -> COUNT(DISTINCT color) = 2;
+----+
| id |
+----+
|  2 |
| 33 |
+----+
2 rows in set (0.00 sec)

mysql> SELECT 
    -> DISTINCT COUNT(id)
    -> FROM 
    -> colors
    -> WHERE 
    -> color = 'red'
    -> OR 
    -> color = 'blue'
    -> GROUP BY 
    -> id
    -> HAVING 
    -> COUNT(DISTINCT color) = 2;
+-----------+
| COUNT(id) |
+-----------+
|         2 |
+-----------+
1 row in set (0.00 sec)



Задачка для 10-й страницы учебника по SQL
...
Рейтинг: 0 / 0
03.12.2016, 01:30
    #39359780
bastardi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная выборка из записей
MikkiMouse, спасибо, друг
...
Рейтинг: 0 / 0
03.12.2016, 11:34
    #39359816
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная выборка из записей
bastardi,
это неправиоьное решение.
...
Рейтинг: 0 / 0
03.12.2016, 22:30
    #39359939
MikkiMouse
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная выборка из записей
MasterZiv,

Ну так напиши правильное, не базарь лишнего
...
Рейтинг: 0 / 0
05.12.2016, 11:10
    #39360315
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сложная выборка из записей
MikkiMouse,

не, не буду, мне твоя “интересная" задача неинтересна.

учи SQL, делай сам.
Подскажу,

там либо запрос с двумя exists, либо два join.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложная выборка из записей / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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