<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: SQL: Void division by Zero using CASE</title>
	<atom:link href="http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/feed/" rel="self" type="application/rss+xml" />
	<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/</link>
	<description>Hablar de existencias inmateriales es hablar de la nada --Thomas Jefferson--.</description>
	<lastBuildDate>Sun, 13 Jun 2010 05:50:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Toltecatl</title>
		<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/comment-page-1/#comment-262</link>
		<dc:creator>Toltecatl</dc:creator>
		<pubDate>Mon, 01 Jun 2009 14:47:31 +0000</pubDate>
		<guid isPermaLink="false">http://geeking.me/blog/?p=779#comment-262</guid>
		<description>Gunnar: 
Esa función: &lt;em&gt;coalesce&lt;/em&gt; &lt;strong&gt;no la conocía&lt;/strong&gt;. Está interesante, sí me resuelve el problema y me quita la necesidad de hacer la función, muchas gracias por el feedback.

:-)</description>
		<content:encoded><![CDATA[<p>Gunnar:<br />
Esa función: <em>coalesce</em> <strong>no la conocía</strong>. Está interesante, sí me resuelve el problema y me quita la necesidad de hacer la función, muchas gracias por el feedback.</p>
<p> <img src='http://geeking.me/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gunnar</title>
		<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/comment-page-1/#comment-256</link>
		<dc:creator>Gunnar</dc:creator>
		<pubDate>Sun, 31 May 2009 00:53:50 +0000</pubDate>
		<guid isPermaLink="false">http://geeking.me/blog/?p=779#comment-256</guid>
		<description>Otro punto, creo, importante es separar el problema, limpiar la expresión. En vez de estar checando en todo caso explícitamente contra 0 o contra NULL, ¿por qué no usas coalesce()? De este modo, por ejemplo, tu segundo SQL podría quedar:

&lt;code&gt;CREATE OR REPLACE FUNCTION suma(INT, INT)  
RETURNS INTEGER LANGUAGE SQL  
CALLED ON NULL INPUT  
AS ’SELECT coalesce($1, 0) + coalesce($2,0)’  
IMMUTABLE;&lt;/code&gt;

Claro, acá la declaración de función termina siendo innecesaria... Y sí, sé que si tanto $1 como $2 son nulos el resultado debería ser NULL y no 0 — Podrías introducirlo como un único caso especial... O si para tu espacio de problemas da igual.</description>
		<content:encoded><![CDATA[<p>Otro punto, creo, importante es separar el problema, limpiar la expresión. En vez de estar checando en todo caso explícitamente contra 0 o contra NULL, ¿por qué no usas coalesce()? De este modo, por ejemplo, tu segundo SQL podría quedar:</p>
<p><code>CREATE OR REPLACE FUNCTION suma(INT, INT)<br />
RETURNS INTEGER LANGUAGE SQL<br />
CALLED ON NULL INPUT<br />
AS ’SELECT coalesce($1, 0) + coalesce($2,0)’<br />
IMMUTABLE;</code></p>
<p>Claro, acá la declaración de función termina siendo innecesaria&#8230; Y sí, sé que si tanto $1 como $2 son nulos el resultado debería ser NULL y no 0 — Podrías introducirlo como un único caso especial&#8230; O si para tu espacio de problemas da igual.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: nitrØus</title>
		<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/comment-page-1/#comment-255</link>
		<dc:creator>nitrØus</dc:creator>
		<pubDate>Sat, 30 May 2009 03:08:41 +0000</pubDate>
		<guid isPermaLink="false">http://geeking.me/blog/?p=779#comment-255</guid>
		<description>*ya vi
*buen análisis we
*ese tipo d cosas
*son chingonas analizarlas
*comprender la lógica computacional detrás de las escenas</description>
		<content:encoded><![CDATA[<p>*ya vi<br />
*buen análisis we<br />
*ese tipo d cosas<br />
*son chingonas analizarlas<br />
*comprender la lógica computacional detrás de las escenas</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Toltecatl</title>
		<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/comment-page-1/#comment-254</link>
		<dc:creator>Toltecatl</dc:creator>
		<pubDate>Fri, 29 May 2009 19:07:57 +0000</pubDate>
		<guid isPermaLink="false">http://geeking.me/blog/?p=779#comment-254</guid>
		<description>k001:

Ud. &lt;em&gt;nomás&lt;/em&gt; &lt;strong&gt;no&lt;/strong&gt; se me apanique. Apechúguele y a darle, que para eso estamos :-P</description>
		<content:encoded><![CDATA[<p>k001:</p>
<p>Ud. <em>nomás</em> <strong>no</strong> se me apanique. Apechúguele y a darle, que para eso estamos <img src='http://geeking.me/blog/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: k001</title>
		<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/comment-page-1/#comment-253</link>
		<dc:creator>k001</dc:creator>
		<pubDate>Fri, 29 May 2009 18:28:57 +0000</pubDate>
		<guid isPermaLink="false">http://geeking.me/blog/?p=779#comment-253</guid>
		<description>Chaleee no sabia que te estaba ayudando en pgsql u.u NO sabo pgsql</description>
		<content:encoded><![CDATA[<p>Chaleee no sabia que te estaba ayudando en pgsql u.u NO sabo pgsql</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Toltecatl</title>
		<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/comment-page-1/#comment-251</link>
		<dc:creator>Toltecatl</dc:creator>
		<pubDate>Fri, 29 May 2009 00:33:35 +0000</pubDate>
		<guid isPermaLink="false">http://geeking.me/blog/?p=779#comment-251</guid>
		<description>Lobo-X:

En efecto, en lo que mencionas 
&lt;code&gt;
SELECT CASE
WHEN $2 IS NULL OR $2 = 0 THEN
0
ELSE
(($1 / $2) *100)
END
&lt;/code&gt;
Sí podría caber la posibilidad, solo que en la definición de la tabla, el valor por defecto del campo $1 es 0, al igual que para el $2, por esta razón no incluí el case correspondiente.
Y bueno, tu comentario --excelente-- muchas gracias por el feedback :-)</description>
		<content:encoded><![CDATA[<p>Lobo-X:</p>
<p>En efecto, en lo que mencionas<br />
<code><br />
SELECT CASE<br />
WHEN $2 IS NULL OR $2 = 0 THEN<br />
0<br />
ELSE<br />
(($1 / $2) *100)<br />
END<br />
</code><br />
Sí podría caber la posibilidad, solo que en la definición de la tabla, el valor por defecto del campo $1 es 0, al igual que para el $2, por esta razón no incluí el case correspondiente.<br />
Y bueno, tu comentario &#8211;excelente&#8211; muchas gracias por el feedback <img src='http://geeking.me/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lobo-X</title>
		<link>http://geeking.me/blog/2009/05/28/sql-void-division-zero-using-case/comment-page-1/#comment-250</link>
		<dc:creator>Lobo-X</dc:creator>
		<pubDate>Fri, 29 May 2009 00:26:43 +0000</pubDate>
		<guid isPermaLink="false">http://geeking.me/blog/?p=779#comment-250</guid>
		<description>El problema con las divisiones que implican un cero es cuando éste se presenta como divisor (o sea, que le toca estar abajo de la raya, sin albur), de modo que en tu función bien puedes omitir la revisión de $1, puesto que, de resultar cero, la operación devolverá invariablemente esa &quot;cantidad&quot;.

Con lo anterior, puedes dejar solamente una línea de validación de $2:

&lt;code&gt;
...
     SELECT CASE  
         WHEN $2 IS NULL OR $2 = 0 THEN  
             0  
         ELSE
             (($1 / $2) *100)  
         END
...
&lt;/code&gt;

Sólo queda una polémica: verificar si $1 es cero para entonces devolver automáticamente eso, cero, y ahorrarse una división resuelta de antemano, o dejar que Postgre haga el cálculo y se ahorre una comparación. Me parece que la diferencia entre uno y otro será de una fracción de milisegundo.

También desconozco si aquí existe el concepto de &quot;safe-binary&quot;, porque de no haberlo, es probable que se obtenga un error cuando $1 sea NULL, entonces tal vez sí debas mantener:

         WHEN $1 IS NULL THEN
             0

Como sea, el código ya quedó simplificado.

Saludos.</description>
		<content:encoded><![CDATA[<p>El problema con las divisiones que implican un cero es cuando éste se presenta como divisor (o sea, que le toca estar abajo de la raya, sin albur), de modo que en tu función bien puedes omitir la revisión de $1, puesto que, de resultar cero, la operación devolverá invariablemente esa &#8220;cantidad&#8221;.</p>
<p>Con lo anterior, puedes dejar solamente una línea de validación de $2:</p>
<p><code><br />
...<br />
     SELECT CASE<br />
         WHEN $2 IS NULL OR $2 = 0 THEN<br />
             0<br />
         ELSE<br />
             (($1 / $2) *100)<br />
         END<br />
...<br />
</code></p>
<p>Sólo queda una polémica: verificar si $1 es cero para entonces devolver automáticamente eso, cero, y ahorrarse una división resuelta de antemano, o dejar que Postgre haga el cálculo y se ahorre una comparación. Me parece que la diferencia entre uno y otro será de una fracción de milisegundo.</p>
<p>También desconozco si aquí existe el concepto de &#8220;safe-binary&#8221;, porque de no haberlo, es probable que se obtenga un error cuando $1 sea NULL, entonces tal vez sí debas mantener:</p>
<p>         WHEN $1 IS NULL THEN<br />
             0</p>
<p>Como sea, el código ya quedó simplificado.</p>
<p>Saludos.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
