Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите плиз с SQL в MySQL, как правильно сделать? / 14 сообщений из 14, страница 1 из 1
10.04.2014, 11:49:37
    #38610954
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
Код: plsql
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.
SELECT
  serviceName,
  serviceCategory,
  serviceTicket,
  letter,
  regFromKiosk,
  routineTimeMinute,
  appointmentMaxDays,
  priority,
  count(1)
FROM (SELECT 
        s.NAME as serviceName, 
        CASE WHEN s.DEPARTMENT_ID IS NULL THEN "Общая" ELSE "Локальная" END AS serviceCategory,
        s.NAME_FOR_TICKET AS serviceTicket,
        s1.LETTER AS letter,
        CASE WHEN s.REG_FROM_KIOSK = 1 THEN "Да" ELSE "Нет" END AS regFromKiosk,
        s.ROUTINE_TIME_MINUTE AS routineTimeMinute,
        s.APPOINTMENT_MAX_DAYS AS appointmentMaxDays,
        s.PRIORITY AS priority
      FROM fact_operation fo
        INNER JOIN service s ON fo.SERVICE_ID = s.ID
        LEFT JOIN sequence s1 ON s.SEQUENCE_ID = s1.ID
        ) AS b
GROUP BY 
  serviceName, 
  serviceCategory, 
  serviceTicket, 
  letter, 
  regFromKiosk, 
  routineTimeMinute, 
  appointmentMaxDays, 
  priority
  ;


Этот запрос возвращает 154 строки.

Код: plsql
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.
SELECT
  serviceName,
  serviceCategory,
  serviceTicket,
  letter,
  regFromKiosk,
  routineTimeMinute,
  appointmentMaxDays,
  priority,
  opportunityDelay,
  count(1)
FROM (SELECT 
        s.NAME as serviceName, 
        CASE WHEN s.DEPARTMENT_ID IS NULL THEN "Общая" ELSE "Локальная" END AS serviceCategory,
        s.NAME_FOR_TICKET AS serviceTicket,
        s1.LETTER AS letter,
        CASE WHEN s.REG_FROM_KIOSK = 1 THEN "Да" ELSE "Нет" END AS regFromKiosk,
        s.ROUTINE_TIME_MINUTE AS routineTimeMinute,
        s.APPOINTMENT_MAX_DAYS AS appointmentMaxDays,
        s.PRIORITY AS priority,
        CASE WHEN EXISTS(SELECT 1 FROM service_flow sf WHERE sf.DTYPE = "H" AND sf.SERVICE_FROM = s.ID) THEN "Да" ELSE "Нет" END AS opportunityDelay
      FROM fact_operation fo
        INNER JOIN service s ON fo.SERVICE_ID = s.ID
        LEFT JOIN sequence s1 ON s.SEQUENCE_ID = s1.ID
        ) AS b
GROUP BY 
  serviceName, 
  serviceCategory, 
  serviceTicket, 
  letter, 
  regFromKiosk, 
  routineTimeMinute, 
  appointmentMaxDays, 
  priority, 
  opportunityDelay
  ;

Этот 174

Как такое может быть??? И как задуманное правильно сделать?
Чтобы итоговые данные не дублировались.
...
Рейтинг: 0 / 0
10.04.2014, 11:51:38
    #38610964
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
И да, хочу сказать что я ораклист.
В mysql новичок.
Не судите плиз строго. ))
...
Рейтинг: 0 / 0
10.04.2014, 12:03:16
    #38610986
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipok,

Код: plsql
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.
SELECT
  serviceName,
  serviceCategory,
  serviceTicket,
  letter,
  regFromKiosk,
  routineTimeMinute,
  appointmentMaxDays,
  priority,
  opportunityDelay,
  count(1)
FROM (SELECT 
        s.NAME as serviceName, 
        CASE WHEN s.DEPARTMENT_ID IS NULL THEN "Общая" ELSE "Локальная" END AS serviceCategory,
        s.NAME_FOR_TICKET AS serviceTicket,
        s1.LETTER AS letter,
        CASE WHEN s.REG_FROM_KIOSK = 1 THEN "Да" ELSE "Нет" END AS regFromKiosk,
        s.ROUTINE_TIME_MINUTE AS routineTimeMinute,
        s.APPOINTMENT_MAX_DAYS AS appointmentMaxDays,
        s.PRIORITY AS priority,
        CASE WHEN sf1.SERVICE_ID IS NOT NULL THEN "Да" ELSE "Нет" END AS opportunityDelay
      FROM fact_operation fo
        INNER JOIN service s ON fo.SERVICE_ID = s.ID
        LEFT JOIN sequence s1 ON s.SEQUENCE_ID = s1.ID
        LEFT JOIN (SELECT DISTINCT sf.SERVICE_FROM AS SERVICE_ID FROM service_flow sf WHERE sf.DTYPE = "H") AS sf1 ON sf1.SERVICE_ID = s.ID) AS b
GROUP BY 
  serviceName, 
  serviceCategory, 
  serviceTicket, 
  letter, 
  regFromKiosk, 
  routineTimeMinute, 
  appointmentMaxDays, 
  priority, 
  opportunityDelay



этот возвращает 172
...
Рейтинг: 0 / 0
10.04.2014, 12:07:00
    #38610997
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipokКак такое может быть??? И как задуманное правильно сделать?Запросы не эквивалентные.

Рассказывайте, что именно задумано.

И, если уж Вы ораклист, то непонятно что вызвало удивление, т.к. никаких MySQL-специфичных вещей в запросах я не вижу. В Оракле результат был бы тем же самым.
...
Рейтинг: 0 / 0
10.04.2014, 12:10:58
    #38611006
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
miksoft,

Объясните, почему строки увеличиваются?
...
Рейтинг: 0 / 0
10.04.2014, 12:13:09
    #38611010
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipok,

Там же CASE c exists. Я это применяю, чтобы строки не увеличивались.
...
Рейтинг: 0 / 0
10.04.2014, 12:16:00
    #38611015
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipokvadipok,

Там же CASE c exists. Я это применяю, чтобы строки не увеличивались.Во втором запросе есть поле opportunityDelay. Разные значения в нем увеличивают количество групп.
...
Рейтинг: 0 / 0
10.04.2014, 12:19:05
    #38611019
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
miksoftvadipokvadipok,

Там же CASE c exists. Я это применяю, чтобы строки не увеличивались.Во втором запросе есть поле opportunityDelay. Разные значения в нем увеличивают количество групп.

Да не могут они увеличить количество.
Там на каждую услугу приходится только один ответ.(Либо да либо нет)
В оракле этого не произошло бы, я уверен.
Посмотрите последний запрос, там тоже увеличилось.

В общем вопрос остается открытым.
...
Рейтинг: 0 / 0
10.04.2014, 12:26:56
    #38611032
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipokmiksoftпропущено...
Во втором запросе есть поле opportunityDelay. Разные значения в нем увеличивают количество групп.

Да не могут они увеличить количество.
Там на каждую услугу приходится только один ответ.(Либо да либо нет)Из запроса это неочевидно.
Это поле зависит от полей, не входящих в группировку.

Собственно, что спорить, посмотрите на сам результат запроса. В нем есть это поле.
Поскольку в MySQL группировка дополнительно сортирует результат, легко будет видно записи, где все поля имеют одинаковое значение, а opportunityDelay будет различным.
...
Рейтинг: 0 / 0
10.04.2014, 12:37:18
    #38611050
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
miksoft,

Я понял почему, там названия услуг одинаковые, но их ИДишники по ходу отличаются.
Посмотрел справочник, на самом деле так. Спасибо!
...
Рейтинг: 0 / 0
10.04.2014, 13:16:34
    #38611115
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipokИ да, хочу сказать что я ораклист.
В mysql новичок.
Не судите плиз строго. ))

Чё ты хочешь, у тебя разные запросы, а именно -- условия группировки, соотв. разное число строк.
До 2 раз может увеличится число твоих строк.
...
Рейтинг: 0 / 0
10.04.2014, 13:22:58
    #38611122
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipokДа не могут они увеличить количество.
Там на каждую услугу приходится только один ответ.(Либо да либо нет)
В оракле этого не произошло бы, я уверен.


Ты бы идентификатор услуги в GROUP BY включил бы...
Ораклист он, блин...
...
Рейтинг: 0 / 0
10.04.2014, 13:23:00
    #38611123
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
MasterZivvadipokИ да, хочу сказать что я ораклист.
В mysql новичок.
Не судите плиз строго. ))

Чё ты хочешь, у тебя разные запросы, а именно -- условия группировки, соотв. разное число строк.
До 2 раз может увеличится число твоих строк.

Если бы в таблице service не было дублей по названиям, то не увеличилось бы.
Это же очевидно, там inner join тут case exists.
В принципе это не возможно.
...
Рейтинг: 0 / 0
10.04.2014, 13:23:30
    #38611124
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите плиз с SQL в MySQL, как правильно сделать?
vadipokmiksoft,

Я понял почему, там названия услуг одинаковые, но их ИДишники по ходу отличаются.
Посмотрел справочник, на самом деле так. Спасибо!

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


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