[英]How to count rows in (SQL)?
我有兩個表 A、B,我的查詢顯示它:(加入 A 和 B)
select A.i,A.j,B.x,B.y,B.z from A inner join B on A.id=B.id_B order by A.i,A.j
.
+-----+-----+-----+-----+-----+
| A.i | A.j | B.x | B.y | B.z |
+=====+=====+=====+=====+=====+
| bk | bg | 1 | inf1| bar |
+-----+-----+-----+-----+-----+
| bk | bg | 2 | inf2| bar |
+-----+-----+-----+-----+-----+
| bk | bg | 3 | inf3| y |
+-----+-----+-----+-----+-----+
| ro | fn | 5 | enf1| bar |
+-----+-----+-----+-----+-----+
| ro | fn | 3 | enf2| bar |
+-----+-----+-----+-----+-----+
| st | st | 3 | onf1| bar |
+-----+-----+-----+-----+-----+
現在我想知道是多少次
艾
重復,像這樣:
+-----+-----+-----+-----+-----+
| A.i | A.j | B.x | B.y | B.z |RepeatColumn
+=====+=====+=====+=====+=====+---
| bk | bg | 1 | inf1| bar | 3 |(bk is repeated 3 times)
+-----+-----+-----+-----+-----+---
| bk | bg | 2 | inf2| bar | 3 |(bk is repeated 3 times)
+-----+-----+-----+-----+-----+---
| bk | bg | 3 | inf3| y | 3 |(bk is repeated 3 times)
+-----+-----+-----+-----+-----+---
| ro | fn | 5 | enf1| bar | 2 |(ro is repeated 2 times)
+-----+-----+-----+-----+-----+---
| ro | fn | 3 | enf2| bar | 2 |(ro is repeated 2 times)
+-----+-----+-----+-----+-----+---
| st | st | 3 | onf1| bar | 1 |(st is repeated once)
+-----+-----+-----+-----+-----+---
我怎么能做這個查詢,有人知道嗎?
你需要subquery
:
select A.i,A.j,
B.x,B.y,B.z,
(select count(*) from b where b.id = a.id) RepeatColumn
from A
inner join B
order by A.i,A.j;
但是,我沒有在 o/p 中找到表( A
, B
)之間的任何關系。 所以,我只是在飛行中使用。
編輯:不幸的是(對你來說)它看起來 MySQL 不支持簡單的窗口函數。
像這樣:
COUNT(1) OVER
( PARTITION BY A.i
) AS cnt
這取決於您的用例是否比您所展示的更復雜,是否值得拼湊 group_concat 解決方法,或者只是使用子查詢來獲取計數。
從表名中選擇計數(AI);
select A.i,
A.j,
B.x,
B.y,
B.z,
count(A.i) as repeated_column
from A inner join B
order by A.i, A.j
嘗試使用subquery
SELECT
A.i,
A.j,
B.x,
B.y,
B.z,
(SELECT COUNT(1) FROM A as WHERE i = A.i) AS 'RepeatColumn'
FROM A
INNER JOIN B
ORDER BY A.i,A.j
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.