mysql - 从多个列中计算特定值,然后按另一列中的值进行分组……在mysql中

标签 mysql

嘿。当用户填写并提交报告表格时,我有160列填充有数据。这些列中的一些包含相似的数据,但是每个记录集需要此数据的多个实例,因为报告中的每个实例可能有所不同。

例如,员工在一天中的某个时间点打开某种类型的案例,然后在一天中的另一点打开另一种类型的案例。我想基于这些列中的值为每个用户创建总计。我现在要定位的是一列,案例类型。我希望能够在CT1,CT2,CT3 ...到CT20列中看到值“ TSTO”的所有实例。然后将其按员工ID号排序,该ID仅是表中的一列。

有任何想法吗?我正在为此奋斗。

到目前为止,我有SELECT CT1, CT2, CT3, CT4, CT5, CT6, CT7, CT8, CT9, CT10, CT11, CT12, CT13, CT14, CT15, CT16, CT17, CT18, CT19, CT20 FROM REPORTS GROUP BY OFFICER

这将在记录集中显示所有案例类型条目的值,但是我需要对它们进行计数(尝试使用),

SELECT CT1, CT2, CT3, CT4, CT5, CT6, CT7, CT8, CT9, CT10, CT11, CT12, CT13, CT14, CT15, CT16, CT17, CT18, CT19, CT20 FROM REPORTS COUNT(TSTO) GROUP BY OFFICER

但它只会吐出一个错误。我对mysql数据库和php还是很陌生,我感到我掌握了一个很好的知识,但是查询数据库和所涉及的语法现在有点混乱和/或不堪重负。只是要学习语言。我将继续寻找,并且在这里找到了类似的内容,但是我(完全)不明白我在看什么,我想回避使用“有效”的代码,但我不完全理解。

非常感谢你 :)

编辑-

因此,该数据库是员工工作日活动报告服务器。该人通常会在白天打开案件。这些案例的类型各不相同,它们的不同类型由四字母约定指定。因此,您的不同案例类型可以是TSTO,DOME,ASBA等。因此,用户将全天填写表格,然后将其提交到数据库。很好:)现在,我正在尝试构建一个页面,该页面将根据用户请求查询数据库以获取用户活动的统计信息。所以现在我正在尝试生成统计信息。具体来说,我希望能够生成统计数据,并且用人类的话来说,“雇员输入案例类型有多少次发生”

因此,当用户提交表单时,他们将在一个表单中最多键入20个这种四个字母的案例类型,此案例类型条目有20个字段,因此有20列。因此,案例类型的这20列将在一个记录集中,每个报告生成一个记录集。生成的另一个列是employeeid列,它基本上标识谁通过表单来生成记录集。

因此,我希望能够跨所有记录集查询案例类型的所有20列,以获取案例的定义类型(TSTO,DOME,ASBA等),然后将其分组为相应的用户。

所以输出看起来像

316 TSTO for employeeid108

我希望这有助于清除它。再说一次,我对这一切还是很新鲜的,因此我在白话和最佳实践等方面并不是最好的。

非常感谢 :)

编辑2-

因此,为了进一步详细说明正在发生的事情,我有一个包含164个字段的HTML表单。这些字段中的每个字段最终都会在我的数据库的单个记录集中(每个提交)将值放入列中。我无法发布图片或两个以上的URL,所以我将尽我最大的努力来解释它,而无需截图。

因此,发生的情况是此信息进入数据库。然后是查询。我有一个搜索页面,该页面使用HTML表单来选择要搜索的信息类型。然后,它显示与查询匹配的每个报告的摘要。然后,用户将要完整查看的报告的REPORT ID#输入另一种小格式(带有提交按钮的输入字段),这会将他们带到页面,单击“提交”时将显示完整的报告。

因此,现在我正在尝试进行总计,并且意识到我的数据库将需要进行一些工作和调整,以便更轻松地为其查询所需的不同信息。到目前为止,我已经收集了一些有用的信息,并将继续尝试并尽我所能提供有关我的设置的简要信息。

谢谢。

编辑3-

也许您可以转到我的Photobucket并将其签出,应该让我做一个链接,有五个屏幕截图,您可以更好地了解我在那里发生的事情。

http://s1082.photobucket.com/albums/j376/hughessa

:)

最佳答案

对于当前的数据库架构,您要查找的查询将非常长且复杂。

每个表(例如some_id,column1,column2,column3,column4 ...),其中列存储相同类型的数据,也可以由一个表(some_id,column_number,column_value)表示,而不是1行包含20列的值有20行。

因此,您的表应该看起来像:

officer     ct_number     ct_value
1           CT1           TSTO
1           CT2           DOME
1           CT3           TSTO
1           CT4           ASBA
(...)
2           CT1           DOME
2           CT2           TSTO


对于这样的表,如果您想查找官员1出现了多少个不同的ct_values,可以使用一个简单的查询:

SELECT officer, ct_value, count(ct_value) AS ct_count 
  FROM reports WHERE officer=1 GROUP BY ct_value


给出结果

officer   ct_value    ct_count   
1         TSTO        2
1         DOME        1
1         ASBA        1


如果您想找出不同官员有多少个TSTO,可以使用:

SELECT officer, ct_value, count( officer ) as ct_count FROM reports
  WHERE ct_value='TSTO' GROUP BY officer


给出结果

 officer  ct_value  ct_count
 1        TSTO      2
 2        TSTO      1


同样,您对旧架构的任何类型的查询都可以轻松转换为新架构。

但是,如果您需要存储有关每个特定报告的其他信息,我建议您使用两个表:

Submissions 
submission_id    report_id   ct_number  ct_value
primary key      
auto-increment
------------------------------------------------
1                1           CT1        TSTO
2                1           CT2        DOME
3                1           CT3        TSTO
4                1           CT4        ASBA
5                2           CT1        DOME
6                2           CT2        TSTO  


使用report_id指向另一个表中的记录,该表中的列与您需要的其他数据一样多:

Reports
report_id      officer     date                 some_other_data
primary key
auto-increment
--------------------------------------------------------------------
1              1           2011-04-29 11:28:15  Everything went ok
2              2           2011-04-29 14:01:00  There were troubles


例:
不同官员有多少个TSTO:

SELECT r.officer, s.ct_value, count( officer ) as ct_count 
FROM submissions s JOIN reports r ON s.report_id = r.report_id
WHERE s.ct_value='TSTO' 
GROUP BY r.officer

关于mysql - 从多个列中计算特定值,然后按另一列中的值进行分组……在mysql中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5821517/

相关文章:

mysql - Laravel 选择位置/计数查询

php - 使用 PHP 对 MYSQL 条目进行分组

php - centos apache无法访问mariadb

mysql - 如何检查用户请求正在访问(未更新)表(MySQL)

php - Codeigniter 连接多个 id 并显示到 View

Mysql 反向模式匹配 - 替代方案?

mysql - Rand() 查询应该产生相同的结果

mysql - 对于超过 3 个字节的字符,在将其保存到 Mysql 之前验证字符串

mysql - 在 SQL 中创建一个表,其中每个元组可以有多个值

mysql - 来自其他 SELECT 的变量 LIMIT