【问题标题】:Mysql count from multiple columns?Mysql从多列计数?
【发布时间】:2020-01-22 15:25:20
【问题描述】:

我有以下简化表格:

  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 查询 但不能通过第一列 '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,但我不知道在哪里放置下一个查询,或者我想要到达的内容是否与上述链接有关。提前致谢

【问题讨论】:

    标签: mysql count subquery


    【解决方案1】:

    在您的查询中,您似乎过滤掉了 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 查询运行良好。没想到sum case函数组合。干杯!
    猜你喜欢
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多