首页 > 解决方案 > 从表的每一列中获取所有不同的行及其计数

问题描述

我有一个 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.

标签: mysql

解决方案


如果您使用的是最新版本的 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

这样,您可以创建一个内存表并用所需的数据填充它,并在需要时对其进行更新。


推荐阅读