我有以下表格:
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;
但由于某种原因它不起作用。有人能帮助我吗?
谢谢
答案 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;
正如我测试的那样,当数据量很小时,第一个查询通常比秒查询更快。