Domanda

Ecco il mio violino SQL: http://www.sqlfiddle.com/#!2/ 672F4 / 1

Sto cercando di ottenere il conteggio totale dei record per ogni name (tecnicamente, il loro pid a croce) esistente all'interno della tabella info.Quindi, ad esempio, la colonna TOTAL dovrebbe leggere 3 per Rob e 1 per tutti gli altri (Jon, Tim, Ben).L'output dovrebbe apparire come:

PID     NAME    TOTAL
1       rob     3
2       jon     1
3       tim     1
4       ben     1
.

Struttura:

create table names (
  pid int(10),
  name char(20)
);

insert into names values
    (1, 'rob'),
    (2, 'jon'),
    (3, 'tim'),
    (4, 'ben');

create table info (
  id int(10),
  pid int(10),
  info char(20),
  extra char(10)
);

insert into info values
    (1, 1, 'rob blah', 'heh 1'),
    (2, 2, 'jon blah', 'ha 1'),
    (3, 3, 'tim blah', 'ho 1'),
    (4, 4, 'ben blah', 'hi 1'),
    (5, 1, 'rob blah', 'heh 2'),
    (6, 1, 'rob blah', 'heh 3');
.

Query:

SELECT pid, name, total FROM names CROSS JOIN ( SELECT COUNT(extra) AS total FROM info ) AS total;
.

Qualsiasi assistenza sarebbe molto apprezzata.

È stato utile?

Soluzione

SELECT names.pid, name, COUNT(extra) as total 
FROM names 
LEFT JOIN info 
ON info.pid=names.pid 
GROUP BY names.pid
.

Fiddle

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top