Как считать строки в (SQL)? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть две таблицы 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 | 
+-----+-----+-----+-----+-----+

Теперь я хочу узнать, сколько раз

Ai

повторяется так:

    +-----+-----+-----+-----+-----+
    | 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)
    +-----+-----+-----+-----+-----+---

Как я могу выполнить этот запрос, у кого-нибудь есть идеи?

Ответы [ 5 ]

0 голосов
/ 15 мая 2018

Попробуйте использовать 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
0 голосов
/ 15 мая 2018
 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
0 голосов
/ 15 мая 2018

Выберите количество (A.I) из имени таблицы;

0 голосов
/ 15 мая 2018

Вам нужно 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;

Однако я не нашел отношения между таблицами (A, B) в o / p. Итак, я просто использовал на лету.

0 голосов
/ 15 мая 2018

edit: К сожалению (для вас) похоже, что MySQL не поддерживает простые оконные функции.

Примерно так:

COUNT(1) OVER
  ( PARTITION BY A.i
  ) AS cnt

Это зависит от того, сложнее ли ваш вариант использования.чем то, что вы показали, стоит ли обходить обходной путь group_concat или просто использовать подзапрос, чтобы получить значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...