gpt4 book ai didi

mysql - 如何编写MySQL来获取表中不同值的计数?

转载 作者:行者123 更新时间:2023-11-29 12:25:22 27 4
gpt4 key购买 nike

假设database.tbl包含两个字段:fruit和price。

  • 第 1 行:水果='苹果',价格=0.60。
  • 第 2 行:水果='梨',价格=0.60。
  • 第 3 行:水果='peach',价格=0.50。

我想运行一个查询,该查询返回每个字段的不同值的计数,即它应该返回

  • 水果3
  • 价格2

因为有 3 种水果,但只有 2 个不同的价格。

我已经尝试过

SELECT C.COLUMN_NAME, COUNT(DISTINCT C.COLUMN_NAME) FROM tbl JOIN (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS  WHERE TABLE_SCHEMA='database' AND TABLE_NAME='tbl') AS C GROUP BY C.COLUMN_NAME;

但这会返回:

  • 水果1
  • 价格 1

最佳答案

我知道的唯一方法是从 INFORMATION_SCHEMA 查询中获取列名并将它们放入临时表中。然后迭代临时表中的列名并执行动态 SQL 来查询这些列中的不同值。这是一个 T-SQL 示例,因此您必须进行一些更改。

CREATE TABLE #values
(
COLUMN_NAME VARCHAR(100),
DISTINCT_COUNT INT
)

DECLARE @column AS VARCHAR(100) = ''

SELECT COLUMN_NAME INTO #columns FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='dbo' AND TABLE_NAME='tbl'

SELECT TOP 1@column = COLUMN_NAME
FROM #columns
WHERE COLUMN_NAME > @column
ORDER BY COLUMN_NAME ASC

WHILE (@@ROWCOUNT > 0)
BEGIN
DECLARE @sql AS NVARCHAR(1000) = N'INSERT INTO #values (COLUMN_NAME, DISTINCT_COUNT) SELECT ''' + @column + ''', COUNT(DISTINCT ' + @column + N') FROM [db].[dbo].[tbl]'
EXECUTE sp_executesql @sql

SELECT TOP 1 @column = COLUMN_NAME
FROM #columns
WHERE COLUMN_NAME > @column
ORDER BY COLUMN_NAME ASC
END

SELECT * FROM #values

DROP TABLE #columns
DROP TABLE #values

这非常粗糙,只是一个如何完成的示例。如果这是生产代码,我将确保变量类型全部一致并确保列名称安全。这将有帮助:How To have Dynamic SQL in MySQL Stored Procedure

关于mysql - 如何编写MySQL来获取表中不同值的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com