mysql подзапрос для поиска оценки - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть такой табель

+----+-------+------------+-------+
| No | NIK   | Nama       | Nilai |
+----+-------+------------+-------+
|  1 | 06001 | Syafruddin |    70 |
|  2 | 20000 | Maman      |    90 |
|  3 | 30000 | Linda      |    40 |
|  4 | 40000 | Tesa       |    71 |
+----+-------+------------+-------+
+-------------+-------+------------------+
| Range_Nilai | Point | Keterangan       |
+-------------+-------+------------------+
| 0 s/d 50    | E     | Tidak Lulus      |
| 51 s/d 80   | C     | Cukup            |
| 81 s/d 100  | A     | Sangat Memuaskan |
+-------------+-------+------------------+

, и я хочу получить мои результаты вот так

enter image description here

но мои результаты как это

enter image description here

, когда я пытаюсь изменить свой запрос следующим образом

THEN (SELECT b.Point,b.Keterangan FROM range_nilai b where b.Range_Nilai='0 s/d 50')

Я получил ошибку 'Операнд должен содержать 1 столбец (с) '

Может кто-нибудь помочь мне, пожалуйста? это моя скрипка

SELECT  a.*,
        ( CASE 
            WHEN a.nilai >=0 && a.Nilai<=50 
            THEN (SELECT Point FROM range_nilai where Range_Nilai='0 s/d 50')
            WHEN a.nilai >50 && a.Nilai<=80 
            THEN (SELECT Point FROM range_nilai where Range_Nilai='51 s/d 80')
            WHEN a.nilai >80 && a.Nilai<=100 
            THEN (SELECT Point FROM range_nilai where Range_Nilai='81 s/d 100')
            ELSE NULL
        END
         ) as Point,
        ( CASE 
            WHEN a.nilai >=0 && a.Nilai<=50 
            THEN (SELECT Keterangan FROM range_nilai where Range_Nilai='0 s/d 50')
            WHEN a.nilai >50 && a.Nilai<=80 
            THEN (SELECT Keterangan FROM range_nilai where Range_Nilai='51 s/d 80')
            WHEN a.nilai >80 && a.Nilai<=100 
            THEN (SELECT Keterangan FROM range_nilai where Range_Nilai='81 s/d 100')
            ELSE NULL
        END
         ) as Keterangan
FROM nilai a

это мой последний запрос, который у меня есть. может у кого-то есть запрос получше, чем у меня?

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете присоединиться к таблицам и использовать функцию SUBSTRING_INDEX() в предложении ON:

select n.*, r.Point, r.Keterangan
from nilai n inner join range_nilai r
on n.Nilai 
  between 
    substring_index(r.Range_Nilai, ' s/d ', 1)
    and
    substring_index(r.Range_Nilai, ' s/d ', -1)

См. Демонстрационную версию . Результаты:

| No  | NIK   | Nama       | Nilai | Point | Keterangan       |
| --- | ----- | ---------- | ----- | ----- | ---------------- |
| 1   | 6001  | Syafruddin | 70    | C     | Cukup            |
| 2   | 20000 | Maman      | 90    | A     | Sangat Memuaskan |
| 3   | 30000 | Linda      | 40    | E     | Tidak Lulus      |
| 4   | 40000 | Tesa       | 71    | C     | Cukup            |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...