Mysql считать из нескольких столбцов? - PullRequest
0 голосов
/ 22 января 2020

У меня есть следующие упрощенные таблицы:

  statistics
 +-------------+-------------+---------------+
 | type        | itemnumber | borrowernumber |
 +-------------+-------------+---------------+
 | issue       | 26191       | 11978         |
 +-------------+-------------+---------------+
 | issue       | 26190       | 11979         |
 +-------------+-------------+---------------+


items:
 +-------------+-------------+
 | itemnumber  | bibliono    |
 +-------------+-------------+
 | 26191       | 27          |
 +-------------+-------------+
 | 26190       | 28          |
 +-------------+-------------+


biblio_metadata:
 +-------------+----------------------------------------------------+
 | bibliono    | metadata                                           |
 +-------------+----------------------------------------------------+
 | 27          | <?xml.. <datafield tag="082" ind1="0" ind2="4">    |
 |                        <subfield code="a">005.133/M29</subfield> |
 |                         </datafield>                             |                                                      
 +-------------+----------------------------------------------------+
 | 28          | <?xml.. <datafield tag="082" ind1="0" ind2="4">    |
 |                        <subfield code="a">995.133/M29</subfield> |
 |                         </datafield>                             |                                                      
 +-------------+----------------------------------------------------+

  borrowers
 +-------------+-------------+
 | borrowerno  | sort1       |
 +-------------+-------------+
 | 11978       | CAS         |
 +-------------+-------------+
 | 11979       | CBA         |
 +-------------+-------------+

Я хочу получить следующее с помощью mysql запроса:

  +-------------+------------+
  | DDC Range   | CAS | CBA |
  +-------------+------------
  | 001-100     | 1   |     |
  +-------------+------------
  | 900-999     |     | 1   |
  +-------------+-----------+

Я пытаюсь найти правильную комбинацию запросов - если это mysql, выберите запрос по нескольким столбцам или любому другому ключевому слову, но не можете найти правильный термин для поиска. У меня есть следующие составленные mysql запросы , но я не могу go пропустить первый столбец 'CAS' и затем запросить другие 1001 * сортировки * (в этом примере CBA).

SELECT CASE
WHEN ExtractValue(metadata, '//datafield[@tag="082"]/subfield[@code="a"]') REGEXP '^[0]{1}[0-9]{2}[^0-9]+.*' THEN "000-099"
WHEN ExtractValue(metadata, '//datafield[@tag="082"]/subfield[@code="a"]') REGEXP '^[9]{1}[0-9]{2}[^0-9]+.*' THEN "900-999"
ELSE "Others" 
END as "DDC Range", count(borrowers.sort1) 
from statistics s 
LEFT JOIN items on (s.itemnumber=items.itemnumber) 
LEFT JOIN biblio_metadata ON (items.biblionumber=biblio_metadata.biblionumber) 
LEFT JOIN borrowers on (s.borrowernumber=borrowers.borrowernumber) 
WHERE s.type = "issue" 
AND borrowers.sort1="CAS" 
GROUP BY Subjects  

Я смотрю на это COUNT (*) из нескольких таблиц в MySQL, но я не знаю, куда поставить следующий запрос или связано ли то, к чему я пытаюсь прийти вышеупомянутая ссылка. Заранее спасибо

1 Ответ

1 голос
/ 22 января 2020

Похоже, что в вашем запросе вы фильтруете все записи, где borrowers.sort1="CAS", но если я правильно понимаю, они вам понадобятся.

Разве вы не можете просто выполнить все объединения, как указано в вашем вопросе? а затем использовать два случая? Похоже, вас интересует количество (*) по каждому предмету, и вы можете их суммировать.

Возможно, попробуйте что-то вроде ниже:

SELECT 
CASE
WHEN ExtractValue(metadata, '//datafield[@tag="082"]/subfield[@code="a"]') REGEXP '^[0]{1}[0-9]{2}[^0-9]+.*' THEN "000-099"
WHEN ExtractValue(metadata, '//datafield[@tag="082"]/subfield[@code="a"]') REGEXP '^[9]{1}[0-9]{2}[^0-9]+.*' THEN "900-999"
ELSE "Others" 
END as "DDC Range", count(borrowers.sort1),
sum(case when borrowers.sort1="CAS" then 1 else '' end) as 'CAS',
sum(case when borrowers.sort1="CBA" then 1 else '' end) as 'CBA'
from statistics s 
LEFT JOIN items on (s.itemnumber=items.itemnumber) 
LEFT JOIN biblio_metadata ON (items.biblionumber=biblio_metadata.biblionumber) 
LEFT JOIN borrowers on (s.borrowernumber=borrowers.borrowernumber) 
WHERE s.type = "issue"
GROUP BY Subjects
...