sql中count函数和distinct函数的配合使用

遇到一个问题:(面试的问题)
题目:
=========================
用户名 商品 数量
A 甲 1
B 乙 2
C 丙 2
B 甲 1
A 丙 2
C 丙 1

写sql语句
要求查出 购买商品两种类型以上(含)的用户集合

数据表中的数据如下:
图一
[img]http://yangtao309.iteye.com/upload/attachment/56242/fda51ebc-c55c-330f-bde4-633ba2eee5b0.jpg[/img]

同事们给出的意见是:


SELECT temp.name
FROM (
SELECT count(tempone.goodsname) as nums,
tempone.name
FROM tempone
GROUP BY tempone.name
) temp
WHERE temp.nums > 1


查出来的结构如下
图二
[img]http://yangtao309.iteye.com/upload/attachment/56244/bf1599ba-98c1-38b8-9bc6-43c2cfd42438.jpg[/img]

C用户是只卖了一种商品 应该被排除...
如是参考了些列文档...[url]http://sql.1keydata.com/cn/sql-count.php[/url]
把count函数和distinct函数组合起来的用法


SELECT temp.name
FROM (
SELECT count(DISTINCT tempone.goodsname) as nums,
tempone.name
FROM tempone
GROUP BY tempone.name
) temp
WHERE temp.nums > 1


查出来的结构如下
图三
[img]http://yangtao309.iteye.com/upload/attachment/56246/7c783c7c-3480-3d39-b198-057ed4dd01a1.jpg[/img]
如图三表示 符合了该要求

这个题目其实不难,只是平时用到的时候 没注意总结.
鉴于此 我总结如上

===
总结才是记住东西的根本
### SQLCOUNT函数使用方法及示例 #### COUNT函数的基本语法 COUNT函数SQL中的聚合函数之一,用于统计满足特定条件的记录数量。其基本语法如下: ```sql COUNT(*) COUNT(expression) COUNT(DISTINCT expression) ``` - `COUNT(*)`:统计表中所有行的数量,包括包含NULL值的行。 - `COUNT(expression)`:统计指定表达式非NULL的结果数量[^1]。 - `COUNT(DISTINCT expression)`:统计指定表达式中唯一非NULL的结果数量。 #### 示例代码 ##### (1) 统计表中所有记录的数量 以下示例展示了如何使用`COUNT(*)`统计表中所有记录的数量: ```sql SELECT COUNT(*) AS total_records FROM employees; ``` ##### (2) 统计某一列非NULL值的数量 以下示例展示了如何使用`COUNT(column_name)`统计某一列中非NULL值的数量: ```sql SELECT COUNT(salary) AS non_null_salaries FROM employees; ``` ##### (3) 统计某一列中唯一值的数量 以下示例展示了如何使用`COUNT(DISTINCT column_name)`统计某一列中唯一值的数量: ```sql SELECT COUNT(DISTINCT department_id) AS unique_departments FROM employees; ``` ##### (4) 使用WHERE子句过滤记录 以下示例展示了如何结合`WHERE`子句过滤记录并统计结果数量: ```sql SELECT COUNT(*) AS high_salary_employees FROM employees WHERE salary > 50000; ``` ##### (5) 使用GROUP BY进行分组统计 以下示例展示了如何结合`GROUP BY`对数据进行分组并统计每组的数量: ```sql SELECT department_id, COUNT(*) AS department_count FROM employees GROUP BY department_id; ``` #### 性能优化技巧 在处理大量数据时,COUNT函数可能引起性能问题。以下是几种优化技巧: - **使用索引**:为经常查询的列创建索引可以显著提高查询速度。例如,如果需要统计某个表中满足条件`col = 'value'`的记录数量,可以在`col`列上创建索引[^2]。 - **使用子查询**:子查询可以在内部先过滤出符合条件的记录,然后再对结果使用COUNT函数进行统计,从而减少COUNT函数的执行时间[^2]。 #### 注意事项 - 如果表达式中包含NULL值,则`COUNT(expression)`不会统计这些NULL值。 - 在某些数据库系统中,`COUNT(1)``COUNT(*)`的性能可能有所不同,但它们的功能是等价的。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值