postgresql : SQL SELECT query

Examples:

SELECT con WHERE .. IN ( SELECT ) e SELECT con INNER JOIN

SELECT users_ltd.userid, users_ltd.name, users_ltd.password, users_ltd.email, 

FROM users_ltd
    INNER JOIN contacts
    ON users_ltd.email = contacts.email

WHERE users_ltd.email IN (
select  users_ltd.email
-- users_ltd.userid, contacts.itemid, contacts."IDUser", contacts.email
FROM users_ltd
  INNER JOIN contacts
  ON users_ltd.email = contacts.email
  WHERE internal IS NULL
  ORDER BY contacts.email )

SELECT con WHERE IN SELECT e secondo SELECT con INNER JOIN

SELECT email,internal FROM users_ltd 

WHERE email IN (
select  users_ltd.email
FROM users_ltd
  INNER JOIN contacts
  ON users_ltd.email = contacts.email
  WHERE internal IS NULL
  ORDER BY contacts.email )

SELECT con FROM su (SELECT con GROUPING ALIAS obbligatorio ) e con JOIN

SELECT DL.iduser, Dl.conta,C.firstname,C.lastname,C.name, C."Organization",C.email  
     FROM (SELECT  iduser, count (iduser) AS conta   FROM downloadlog  
           WHERE date > '01-01-2007'  
           GROUP BY iduser
           ORDER BY conta DESC ) AS DL
        JOIN contacts C
        ON C.itemid = DL.iduser

        WHERE conta > 5 ;

SELECT  usando alias per indicare le tabelle

SELECT C.email, U.email, C.countrycode, U."Country"
FROM contacts_c U
          JOIN contacts C
                   ON C.email = U.email </pre>

SELECT DISTINCT QUERY
dichiarazione precisa del tipo data
per poter operare correttamente confronti tra le date

CREATE OR REPLACE FUNCTION _getdownloadreport_timestamp(timestamp without time zone, timestamp without time zone, character varying)
  RETURNS SETOF downloadreports_user AS
$BODY

SELECT DISTINCT
       date_trunc('day', downloadlog.date),
       contacts.itemid,
       (contacts.lastname) AS name,
       contacts."Organization",
       contacts.email,

FROM downloadlog
  INNER JOIN contacts
    ON downloadlog.iduser = contacts.itemid
-- non ho sempre il campo country meglio fare una  LEFT JOIN
  LEFT JOIN  country
       ON UPPER(contacts.countrycode) = country.countrycode
--  INNER JOIN download
--    ON downloadlog.iddownload = download.itemid
      WHERE (downloadlog.date >= $1 AND downloadlog.date <= $2 )

ORDER BY name;

$BODY$
  LANGUAGE 'sql' VOLATILE SECURITY DEFINER
  COST 100
  ROWS 1000;

In postgresql IIF è sostituito da CASE .... WHEN .. THEN .. ELSE END
SELECT DISTINCT
       date_trunc('day', downloadlog.date),
       -- downloadlog.date,
       contacts.itemid,
         CASE contacts.lastname  IS Null WHEN TRUE THEN '' ELSE TRIM(contacts.lastname)  END ||
         CASE contacts.firstname IS Null WHEN TRUE THEN '' ELSE (' ' || TRIM(contacts.firstname)) END ||
         CASE contacts.name IS Null WHEN TRUE THEN '' ELSE TRIM(contacts.name) END AS veracity,
       contacts.email,
       contacts."Phone",

FROM downloadlog
  INNER JOIN contacts
    ON downloadlog.iduser = contacts.itemid
  LEFT JOIN  country
       ON UPPER(contacts.countrycode) = country.countrycode
    WHERE (downloadlog.date >= '1-1-2000'::Date AND downloadlog.date <= '1-1-2011'::date )
 ORDER BY name;

..

Risorse:

Postgresql 

Plpgsql 

Postgresql cancella record duplicati

Creare eliminare database e tabelle

Annunci

INSERT SQL

Esempi di SQL query di tipo INSERT

1)

INSERT INTO contacts
SELECT contacts_tmp.*
FROM contacts_tmp
WHERE
contacts_tmp.itemid > 8999 AND contacts_tmp.itemid <9245

2)

INSERT INTO contacts
    SELECT contacts_tmp.*
    FROM contacts_tmp c_t
    WHERE EXIST (
    SELECT 1
    FROM contactsdownload cd     
    WHERE c_t.itemid = cd.itemidcontacts
    AND createddate BETWEEN '06-01-2007' AND '07-30-2008') ;

3)

INSERT INTO download(itemid, "IDProduct", moduleid, createdbyuser, filenameurl, 
            filefriendlyname, description, title, category, selezionato)
     SELECT iddownload, 1, 100, 'ltd', filename, name, description, parentcategory, category, view
     FROM downloads

Standard  :

INSERT INTO _querylist( itemid, title, content  ) 
         VALUES ( 8000, 'easy query', 'SELECT * FROM products ORDER BY itemid' ) ;

Resources:

Postgresql 

Plpgsql 

SQL Count

Nel linguaggio SQL per contare i records che soddisfano una condizione data si utilizza count. Ad esempio:

SELECT  count(c.itemid) AS "Num." ,  c."Country" AS codec
FROM contactsdownloads  INNER JOIN contacts AS c
ON (itemidcontacts) = c.itemid

GROUP BY codec
HAVING  count (c.itemid) > 10

Nella query seguente  viene effettuata la somma e il count a partire non da una tabella ma da  un’altra query.
Questo consente di ottenere un count su due livelli di ragruppamento.
In pratica si effettua un primo raggruppamento dei records che ritornerà il primo conteggio quindi si elaboreranno questi dati con un secondo livello di raggruppamento. Qui si effetturà un nuovo count e si opererà la  somma dei dati del primo count.

SELECT nameprd AS "Name Product" , sum(conta) AS "files downloaded", count (itemidcontacts) AS "N.Users" 
       FROM (SELECT  nameprd , count (itemid) AS conta, itemidcontacts FROM contactsdownloads 
               WHERE createddate > '01-01-2007'
               GROUP BY nameprd, itemidcontacts
               ORDER BY conta DESC ) AS DL

     GROUP BY  nameprd  ORDER BY sum(conta) DESC;

Resources:

Postgresql 

Plpgsql 

SQL Concatenare due o più campi – String Concatenation

Per contanare due o più campi in SQL è si devono utilizzare sintassi diverse a seconda del database utilizzato.

Postgresql e Oracle utilizzano l'operatore || ( doppio pipe ) 

SELECT  firstname || ' ' || lastname  AS name  FROM users

MySQL la funzione concat

SELECT  CONCAT ( firstname, ' ', lastname)  AS name  FROM users

Anche Postgresql mette a disposione la funzione CONCAT che consente di concatenare argomenti anche di tipo diverso.

concat(‘abcde’, 2, NULL, 22)

PostgreSQL: Documentation: 9.1: String Functions and Operators

Microsoft l’operatore somma +

SELECT  firstname + ' ' + lastname  AS name  FROM users

Risorse:

plpgsql 

SQL Cast

Per reaiazzare il cast di un campo in SQL si possono seguire questi esempi

esemio di cast in una select questi

SELECT itemdid, cast( codenumber as varchar(10)), mysubject
FROM mytable

Esemio di cast in una JOIN

SELECT *
FROM mytable mt
LEFT JOIN myothertable ot
    on cast(mt.codenumber as varchar(10)) = ot.number_code 

.
Postgresql cast in select query  -> cast bigint to int

select "MenuParent", cast(count("ModuleID") as integer ) 
from menu
GROUP BY "MenuParent", "ModuleID"
ORDER BY "MenuParent" ;

Risorse:

—–