MSSQL选择带计数

时间:2014-05-21 10:17:22

标签: sql-server select

我有以下表格:

Table: persons
Person_Code   Ονοματεπώνυμο         Διεύθυνση                    Τηλέφωνο 
1              ΠΑΠΑΔΟΠΟΥΛΟΥ ΕΛΕΝΗ    ΠΑΝΕΠΙΣΤΗΜΙΟΥ 125 ΑΘΗΝΑ       210-1111111 
2              ΓΕΩΡΓΙΟΥ ΝΙΚΟΛΑΟΣ     ΚΑΛΟΚΑΙΡΙΝΟΥ 180 ΗΡΑΚΛΕΙΟ     2810-992222 
3              ΑΝΤΩΝΙΟΥ ΜΙΧΑΗΛ       ΚΟΥΝΤΟΥΡΙΩΤΗ 2 ΠΑΤΡΑ          211-000222


Table: Operations
Person_Code  Κωδ_Μετοχής  Ημερομηνία    Ώρα    Είδος   Ποσότητα   Τιμή 
1             ΕΛΤΚ         2013-07-15    14:15  ΑΓΟΡΑ   100        14.30 
2             ΑΛΚΑΤ        2013-07-08    09:20  ΑΓΟΡΑ   1250       19.02  
3             ΕΛΤΚ         2013-08-14    10:30  ΠΩΛΗΣΗ  325        16.30 
1             ΑΑΑΚ         2013-09-01    11:15  ΠΩΛΗΣΗ  528        4.30

我想从第一个表格(persons)PLUS中选择所有列,以便从每个人的the total Person_Code表中计算operations

我尝试了以下查询:

SELECT t1.onomateponimo,t1.dieuthunsh,t1.tilefono, COUNT(t2.Person_Code) 
FROM persons as t1
INNER JOIN operations as t2
    ON t1.Person_Code = t2.Person_Code
ORDER BY t1.onomateponimo ASC;

但由于某种原因它不起作用。有人能帮助我吗?

谢谢

4 个答案:

答案 0 :(得分:2)

如果我理解你的问题(我可能没有),我认为你需要一个GROUP BY:

SELECT t1.onomateponimo,t1.dieuthunsh,t1.tilefono, COUNT(t2.Person_Code) 
FROM persons as t1
INNER JOIN operations as t2
    ON t1.Person_Code = t2.Person_Code
GROUP BY t1.onomateponimo, t1.dieuthunsh, t1.tilefono
ORDER BY t1.onomateponimo ASC;

如果这不正确,为什么不在您的问题中添加预期的输出?

答案 1 :(得分:0)

另一个SELECT语句可以是以下一个

SELECT *
FROM (
    SELECT 
        t1.onomateponimo,t1.dieuthunsh,t1.tilefono 
    FROM persons as t1
) t1
INNER JOIN (
    SELECT 
        t2.Person_Code, COUNT(t2.Person_Code) 
    FROM operations as t2
    GROUP BY t2.Person_Code
) as t2 ON t1.Person_Code = t2.Person_Code
ORDER BY t1.onomateponimo ASC;

答案 2 :(得分:0)

我认为马特投掷者是正确的。您需要Group BY子句。

SELECT P.onomateponimo,P.dieuthunsh,P.tilefono,COUNT(O.Person_Code) 作为P的人 INNER JOIN操作为O.     ON P.Person_Code = O.Person_Code GROUP BY P.onomateponimo,P.dieuthunsh,P.tilefono

如果您需要有序的数据,可以添加order by子句。

答案 3 :(得分:-1)

如果您想计算没有关联操作的人,可以查询

SELECT t1.onomateponimo,t1.dieuthunsh,t1.tilefono, `
(
    SELECT COUNT(*)
    FROM operations AS t2
    WHERE t1.Person_Code = t2.Person_Code
)
FROM persons as t1
ORDER BY t1.onomateponimo ASC;

OR

SELECT t1.onomateponimo,t1.dieuthunsh,t1.tilefono, COUNT(t2.Person_Code) 
FROM persons as t1
LEFT JOIN operations as t2
    ON t1.Person_Code = t2.Person_Code
GROUP BY t1.onomateponimo, t1.dieuthunsh, t1.tilefono
ORDER BY t1.onomateponimo ASC;

正如我测试的那样,当数据量很小时,第一个查询通常比秒查询更快。