mysql - 从表的每一列中获取所有不同的行及其计数
问题描述
我有一个 SQL 语句,它从许多连接创建一个表,我需要获取所有不同的列及其计数,这将用于将信息发送到前端过滤器(此过滤器将具有不同的值和它在表中的次数)。我想到的一种方法是简单地从每个列中单独获取不同的值,但这会非常繁重,因为该表由许多其他表组成并连接在一起,这意味着它可能非常繁重系统单独执行这些列中的每一个,每次都重新创建表。
正如我之前所说的,一种方法是从每个列中获取不同的值,然后分别执行这些语句,然后组合结果,如下所示:
在“客户”表中,我得到每列中的唯一行以及每列的计数。
https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in
SELECT CustomerName , COUNT(CustomerName) FROM [Customers] GROUP BY CustomerName;
SELECT ContactName , COUNT(ContactName) FROM [Customers] GROUP BY ContactName;
SELECT Address , COUNT(Address) FROM [Customers] GROUP BY Address;
SELECT PostalCode , COUNT(PostalCode) FROM [Customers] GROUP BY PostalCode;
SELECT Country , COUNT(Country) FROM [Customers] GROUP BY Country;
SELECT City , COUNT(City) FROM [Customers] GROUP BY City;
TLDR;如上所述,假装我的表是“客户”,但是要多次调用和重新制作一张非常昂贵的表,无论如何我是否可以在一个语句中做我上面所做的事情,IE 以减少我必须加入多个其他表的次数重新创建同一个表。
Select a.col1, a.col2, b.col1, c.col2
FROM a, b left join c
where a.4 = c.4
I need to get the distinct values for `a.col1, a.col2, b.col1, c.col2` along with their count from the result set of this query.
解决方案
如果您使用的是最新版本的 MariaDB/MySQL,您可以使用 WITH 子句来创建这样的表,您可以在此处查看文档:
https://dev.mysql.com/doc/refman/8.0/en/with.html
如果您需要更新表而不是每次都创建(您进行查询),您可以查看 MySQL 的 MEMORY 表:
https://dev.mysql.com/doc/refman/8.0/en/memory-storage-engine.html
这样,您可以创建一个内存表并用所需的数据填充它,并在需要时对其进行更新。
推荐阅读
- python - 如何从 python 中的 af unix 套接字发送多个十六进制字符串列表
- javascript - 将错误从一个异步函数传递到另一个
- javascript - 如何获取 JavaScript onclick 调用元素的 id
- apache-spark - javax.xml.stream.XMLStreamException:试图输出第二个根 Spark-XML Spark 程序
- mysql - 使用触发器更新同一个mysql表中的数据
- metadata - 我应该使用元属性还是 json-ld
- vue.js - nuxt js,如何在服务器端渲染时获取网页的主机名
- sql - 将 2 个表中的值相乘 sql server
- firebase - Flutter 是否支持 Firebase 动态链接?
- assembly - 跳出范围