2010-07-23 5 views
2

Lors de la création d'une vue, le nom attribué à une colonne n'est pas toujours utilisable dans sqlite, afin d'effectuer une opération spécifique par la suite. Par exemple, je crée la vue suivante:Utilisez cid dans sqlite au lieu du nom de la colonne?

CREATE VIEW myview AS 
    SELECT amount, count(name), name 
    FROM mytable 
GROUP BY name 
    HAVING count(name) > 1; 

Je voudrais faire l'opération suivante:

SELECT total(amount*count(name)) 
    FROM myview; 

Malheureusement, count (nom) est le nom donné par sqlite à la deuxième colonne , par conséquent, ne peut pas être utilisé dans une déclaration select. le PRAGMA table_info(myview) nous montre que le cid à ​​compter (nom) est 1, est-il de toute façon d'utiliser cette information pour pouvoir faire un peu de calcul sur cette colonne?

Répondre

2

Vous devez définir un alias de colonne:

CREATE VIEW myview AS 
    SELECT amount, 
     COUNT(name) AS name_count, 
     name 
    FROM mytable 
GROUP BY name 
    HAVING count(name) > 1; 

Ensuite, vous serez en mesure d'utiliser:

SELECT SUM(v.amount * v.name_count) 
    FROM myview v; 

J'ai changé en total pour SUM, ce qui est plus conforme à d'autres bases de données (SQLite aggregate functions).

+0

Merci, cela répond à ma question! – banx

0
SELECT total(amount*"count(name)") 
    FROM myview; 

fonctionne aussi bien. Il est préférable d'aliaser la colonne quand vous le pouvez, comme indiqué ci-dessus.

Cependant, parfois vous êtes dans une impasse et n'avez pas ce luxe. Si vous citez le nom, vous pouvez l'utiliser tel quel.

Questions connexes