4 ms·
SELECT DISTINCT author FROM books WHERE pageCount > 1000;
by titzer 2y ago
SELECT DISTINCT author
FROM books
WHERE pageCount > 1000;
- __mharrison__ 2y agoFolks don't seem to have a problem when SQL does it. Only when code like Pandas does it...
- mont_tag 2y agoHi Matt! I've observed this phenomenon as well. When the SQL and Pandas examples are isomorphic except for shallow syntactic differences, the root cause of the complaint must either be: * that the judgment was emotional rather than substantive * or that the syntactic differences (dots and parens) actually matter
- __mharrison__ 2y agoFolks really like their intermediate dataframes... for "debugging".
- beryilma 2y agoThis is 5 times more readable than FP example above for the same computation. The FP example uses variable book(s) five times, where using it once was sufficient for SQL. Perhaps FP languages could have learned something from SQL...
- xigoi 2y agoNow modify the SQL to support books having multiple authors. (In the FP example, you would just change map to flatMap.)
- YesBox 2y agoScrolled to find the SQL. Such an elegant, powerful language. Really happy I chose SQLite for my game/project.
- pif 2y agoJust add strong types, with verification at something-like-compile-time, and you'll have a sane language.
- odyssey7 2y agoNotably this example is declarative, the original is functional, and neither is imperative.
- 101011 2y agoIn fairness, if this was in a relational data store, the same code as above would probably look more like... SELECT DISTINCT authors.some_field FROM books JOIN authors ON books.author_id = authors.author_id WHERE books.pageCount > 1000 And if you wanted to grab the entire authors record (like the code does) you'd probably need some more complexity in there: SELECT * FROM authors WHERE author_id IN ( SELECT DISTINCT authors.author_id FROM books JOIN authors ON books.author_id = authors.author_id WHERE books.pageCount > 1000 )
- titzer 2y agoThe last one is better as: SELECT * FROM authors WHERE author_id IN (SELECT author_id FROM books WHERE pageCount > 1000); But I think you're missing the point. The functional/procedural style of writing is sequentialized and potentially slow. It's not transactional, doesn't handle partial failure, isn't parallelizable (without heavy lifting from the language--maybe LINQ can do this? but definitely not in Java). With SQL, you push the entire query down into the database engine and expose it to the query optimizer. And SQL is actually supported by many, many systems. And it's what people have been writing for 40+ years.
- 101011 2y agoagreed on the revised SQL! But I don't think I missed the point, the original text talks about measuring complexity as a function of operators, operands, and nested code. The true one to one mapping is more complex than the original comment I replied to