powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите плиз с SQL в MySQL, как правильно сделать?
14 сообщений из 14, страница 1 из 1
помогите плиз с SQL в MySQL, как правильно сделать?
    #38610954
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.
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
помогите плиз с SQL в MySQL, как правильно сделать?
    #38610964
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, хочу сказать что я ораклист.
В mysql новичок.
Не судите плиз строго. ))
...
Рейтинг: 0 / 0
помогите плиз с SQL в MySQL, как правильно сделать?
    #38610986
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
помогите плиз с SQL в MySQL, как правильно сделать?
    #38610997
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipokКак такое может быть??? И как задуманное правильно сделать?Запросы не эквивалентные.

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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