只是想知道你们中的任何一个人是否Count(1)过度使用过Count(*),如果性能有显着差异,或者这只是从过去几天带来的遗留习惯?
(具体数据库是SQL Server 2005.)
我有一个组织的SQL Server数据库,并且有许多重复的行.我想运行一个select语句来获取所有这些和dupes的数量,但也返回与每个组织关联的id.
声明如下:
SELECT orgName, COUNT(*) AS dupes
FROM organizations
GROUP BY orgName
HAVING (COUNT(*) > 1)
Run Code Online (Sandbox Code Playgroud)
将返回类似的东西
orgName | dupes
ABC Corp | 7
Foo Federation | 5
Widget Company | 2
Run Code Online (Sandbox Code Playgroud)
但我也想抓住他们的身份证.有没有办法做到这一点?也许就像一个
orgName | dupeCount | id
ABC Corp | 1 | 34
ABC Corp | 2 | 5
...
Widget Company | 1 | 10
Widget Company | 2 | 2
Run Code Online (Sandbox Code Playgroud)
原因是还有一个单独的用户表链接到这些组织,我想统一它们(因此删除欺骗,以便用户链接到同一组织而不是欺骗组织).但我想手动分配,所以我不会搞砸任何东西,但我仍然需要一个声明返回所有欺骗组织的ID,以便我可以浏览用户列表.
在[member]表中,某些行具有相同的email列值.
login_id | email
---------|---------------------
john | john123@hotmail.com
peter | peter456@gmail.com
johnny | john123@hotmail.com
...
Run Code Online (Sandbox Code Playgroud)
有些人使用不同的login_id但是使用相同的电子邮件地址,此列上没有设置唯一约束.现在我需要找到这些行,看看是否应该删除它们.
我应该使用什么SQL语句来查找这些行?(MySQL 5)
假设表中存在主要字段"id"(如速度等),以下查询之间是否存在差异?
SELECT COUNT(id)
FROM table
Run Code Online (Sandbox Code Playgroud)
与
SELECT COUNT(*)
FROM table
Run Code Online (Sandbox Code Playgroud) 我在MSSQL2008中运行这样的查询:
select count(*)
from t1
inner join t2 on t1.id = t2.t1_id
inner join t3 on t1.id = t3.t1_id
Run Code Online (Sandbox Code Playgroud)
假设t1.id有一个NOT NULL约束.因为它们是内连接并且t1.id永远不能为null,所以使用count(t1.id)而不是count(*)应该产生完全相同的最终结果.我的问题是:性能是否相同?
我也想知道联接是否会影响这个.我意识到添加或删除连接会影响性能和结果集的长度.假设在不更改连接模式的情况下,您设置count为仅定位一个表.会有什么不同吗?换句话说,这两个查询之间是否存在差异:
select count(*) from t1 inner join t2 on t1.id = t2.t1_id
select count(t1.*) from t1 inner join t2 on t1.id = t2.t1_id
Run Code Online (Sandbox Code Playgroud)
MySQL中的COUNT(id)与COUNT(*)为MySQL回答了这个问题,但是我找不到具体的MS-SQL答案,而且我找不到任何考虑join因素的东西.
注意:我试图在Google和SO上找到这些信息,但很难弄清楚如何说出我的搜索.
我正在使用Hibernate来检索特定查询的行数.假设我有一个名为'Person'的表,其中包含各种列.其中一列是'name'.
如果我想获得名为"安德鲁"的人数,哪种方式最有效?假设它们中的一些/全部存在性能差异.有没有更好的方法来使用Hibernate/SQL?
(1)选择所有列
Query query = session.createQuery("from Person where name= :name");
query.setParameter("name", name);
List result = query.list();
int count = result.size();
Run Code Online (Sandbox Code Playgroud)
(2)只选择名称列
Query query = session.createQuery("select name from Person where name= :name");
query.setParameter("name", name);
List result = query.list();
int count = result.size();
Run Code Online (Sandbox Code Playgroud)
(3)在查询中使用Count
Query query = session.createQuery("select count(*) from Person where name= :name");
query.setParameter("name", name);
long count = (Long) query.uniqueResult();
Run Code Online (Sandbox Code Playgroud)
(4)在查询中使用Count和name列
Query query = session.createQuery("select count(name) from Person where name= :name");
query.setParameter("name", name);
long count = (Long) query.uniqueResult();
Run Code Online (Sandbox Code Playgroud)
编辑:对不起,我的列表中有两个3号
以下查询旨在查找去医院的人数,去医院的总人数以及将这两者划分为百分比.该表Claims是200多万行,并且具有正确的非聚集索引patientid, admissiondate, and dischargdate.查询运行得足够快,但我对如何使它更有用感兴趣.我希望能够在行中添加另一个代码,(hcpcs.hcpcs ='97001')并percentRehabNotHomeHealth在另一列中进行更改.有没有可能没有写一个很大的胖连接语句,我将两个查询的结果连接在一起?我知道通过添加额外的列,数学看起来不正确,但我现在并不担心.所需的样本输出:http://imgur.com/BCLrd
数据库模式

select h.hospitalname
,count(*) as visitCounts
,hospitalcounts
,round(count(*)/cast(hospitalcounts as float) *100,2) as percentRehabNotHomeHealth
from Patient p
inner join statecounties as sc on sc.countycode = p.countycode
and sc.statecode = p.statecode
inner join hospitals as h on h.npi=p.hospitalnpi
inner join
--this join adds the hospitalCounts column
(
select h.hospitalname, count(*) as hospitalCounts
from hospitals as h
inner join patient as p on p.hospitalnpi=h.npi
where p.statecode='21' and …Run Code Online (Sandbox Code Playgroud) 我想在网站上添加一项调查.一项好的调查需要报告.一些基本报告已经完成.现在我想在咖啡上加点奶油......
包含样本数据的表格:
mysql> select * from u001;
+----+----------+------------+-------+---------------------+
| id | drink | sex | age | date |
+----+----------+------------+-------+---------------------+
| 1 | Beer | m | 30-39 | 2012-10-17 23:17:52 |
| 2 | Milk | f | 10-19 | 2012-10-18 00:15:59 |
| 3 | Milk | f | 20-29 | 2012-10-18 23:33:07 |
| 4 | Tea | m | 30-39 | 2012-10-20 22:47:08 |
| 5 | Water | f | 20-29 | 2012-10-20 22:47:30 | …Run Code Online (Sandbox Code Playgroud) 我想知道以下4个简单查询在结果和功能方面的区别:
SELECT COUNT(*) FROM employees;
SELECT COUNT(0) FROM employees;
SELECT COUNT(1) FROM employees;
SELECT COUNT(2) FROM employees;
我想从select查询中检索计数.
什么是更快:count(*)或count(table_field_name)?
我想知道哪种方式更快的性能.
我试图根据表格中的文本计算数字记录
我有这样的表结构
SN_ID NUMBER
PERSON_ID NUMBER
NOTICE_TYPE VARCHAR2
Run Code Online (Sandbox Code Playgroud)
和这样的表的内容
SN_ID PERSON_ID NOTICE_TYPE
-------+-----------+--------------
1 5 Appreciation
2 5 Warning
3 1 Warning
4 5 Incident
5 2 Warning
6 5 Warning
Run Code Online (Sandbox Code Playgroud)
我想计算一个人的感谢,警告和事故记录 Id = 5
sql ×8
mysql ×4
count ×3
performance ×2
sql-server ×2
database ×1
duplicates ×1
hibernate ×1
java ×1
join ×1
oracle ×1
t-sql ×1