MySQL 按值选择计数
我有这个 mysql 表:
DATE | VALUE
我希望成为一个选择,它向我显示以下信息:
DATE | COUNT TOTAL | COUNT VAL=1 | COUNT VAL=2
有什么想法可以实现这一点吗?
I have this mysql table:
DATE | VALUE
and I wish to become a select which shows me this information as:
DATE | COUNT TOTAL | COUNT VAL=1 | COUNT VAL=2
Any ideas how I can achieve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我认为使用
SUM()
你可以获得更简洁的代码。因为它对行的各个表达式的值求和。官方文档可以在此处找到。
I think with
SUM()
you can get neater code. Since it sums the values respective expression for row.Official Documentation can be found here.
当没有匹配时,CASE 表达式将为空。
COUNT()
不计算空值。我想您可能需要动态数量的列,数据中找到的每个值对应一列。 这在 SQL 中是不可能的。在编写查询时必须知道这些列。
因此,您有两种选择来获取每个值的小计:
首先查询
value
所有行中的不同值,并动态构建 SQL 查询,在选择列表中为每个不同值附加一列你想举报。然后运行此 SQL 查询。或者,将所有行作为行获取。计算应用程序代码中每个值的小计。
另一种选择是按组计算小计,并包括总计:
但这不会按照您的要求报告列中的小计,而是报告行中的小计。
The CASE expressions will be null when there is no match. Nulls are not counted by
COUNT()
.I imagine you might want a dynamic number of columns, one column for each value found in the data. This is not possible in SQL. The columns must be known at the time you write the query.
So you have two options to get subtotals per value:
First query the distinct values from all rows of
value
and construct an SQL query dynamically, appending one column in the select-list for each distinct value you want to report. Then run this SQL query.Alternatively, fetch all the rows as rows. Count the subtotals per value in application code.
One further alternative is to count subtotals by groups, and include totals:
But that doesn't report the subtotals in columns as you requested, it reports the subtotals in rows.