Mysql从多列中计数?

标签 mysql count subquery

我有以下简化表格:

  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 select 查询多列或任何其他关键字,但似乎无法获得正确的搜索术语。 我有以下组成的 mysql 查询,但无法传递第一列“CAS”并进一步查询其他 sort1(在此示例中为 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(*) from multiple tables in MySQL但我不知道在哪里放置下一个查询,或者我想要到达的内容是否与上述链接相关。提前致谢

最佳答案

看起来您在查询中过滤掉了 borrowers.sort1="CAS" 的所有条目,但如果我理解正确的话,您将需要这些条目。

您不能按照问题中指定的方式执行所有连接,然后使用两个 case 语句吗?因为您似乎对每个主题的计数(*)感兴趣,所以您可以对它们进行求和。

也许尝试如下所示:

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

关于Mysql从多列中计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59863026/

相关文章:

sql - 为什么临时表和子查询之间存在巨大的性能差异

sql - 计算运行总计时出错(前几个时期的累计)

python - 重复字符的计数,包括字符串python中的非重复字符

mysql - 使用 SUM 和 COUNT 进行多表查询

MySQL : NOT EXISTS/NOT IN 的替代查询

mysql - 这个存储过程代码有什么问题?

mysql - 如何从mysql表中选择范围计数?

subquery - Doctrine 2 子查询

php - 如何检查记录是否被更新?

mysql - SQL 错误 : 1170